{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "TensorFlow_Probability_Case_Study_Covariance_Estimation.ipynb",
      "version": "0.3.2",
      "provenance": [],
      "collapsed_sections": [],
      "toc_visible": true
    },
    "kernelspec": {
      "name": "python2",
      "display_name": "Python 2"
    }
  },
  "cells": [
    {
      "metadata": {
        "id": "pbWmRwcuatWz",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "##### Copyright 2018 The TensorFlow Authors.\n",
        "\n",
        "Licensed under the Apache License, Version 2.0 (the \"License\");"
      ]
    },
    {
      "metadata": {
        "id": "I4NyePmVaxhL",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "#@title Licensed under the Apache License, Version 2.0 (the \"License\"); { display-mode: \"form\" }\n",
        "# you may not use this file except in compliance with the License.\n",
        "# You may obtain a copy of the License at\n",
        "#\n",
        "# https://www.apache.org/licenses/LICENSE-2.0\n",
        "#\n",
        "# Unless required by applicable law or agreed to in writing, software\n",
        "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
        "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
        "# See the License for the specific language governing permissions and\n",
        "# limitations under the License."
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "CaMcWFBtVHG9",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "# TensorFlow Probability Case Study: Covariance Estimation\n",
        "\n",
        "<table class=\"tfo-notebook-buttons\" align=\"left\">\n",
        "  <td>\n",
        "    <a target=\"_blank\" href=\"https://colab.research.google.com/github/tensorflow/probability/blob/master/tensorflow_probability/examples/jupyter_notebooks/TensorFlow_Probability_Case_Study_Covariance_Estimation.ipynb\"><img src=\"https://www.tensorflow.org/images/colab_logo_32px.png\" />Run in Google Colab</a>\n",
        "  </td>\n",
        "  <td>\n",
        "    <a target=\"_blank\" href=\"https://github.com/tensorflow/probability/blob/master/tensorflow_probability/examples/jupyter_notebooks/TensorFlow_Probability_Case_Study_Covariance_Estimation.ipynb\"><img src=\"https://www.tensorflow.org/images/GitHub-Mark-32px.png\" />View source on GitHub</a>\n",
        "  </td>\n",
        "</table>"
      ]
    },
    {
      "metadata": {
        "id": "Rueq5va_3TYc",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "I wrote this notebook as a case study to learn TensorFlow Probability.  The problem I chose to solve is estimating a covariance matrix for samples of a 2-D mean 0 Gaussian random variable.  The problem has a couple of nice features:\n",
        "\n",
        "* If we use an inverse Wishart prior for the covariance (a common approach), the problem has an analytic solution, so we can check our results.\n",
        "* The problem involves sampling a constrained parameter, which adds some interesting complexity.\n",
        "* The most straightforward solution is not the fastest one, so there is some optimization work to do.\n",
        "\n",
        "I decided to write my experiences up as I went along. It took me awhile to wrap my head around the finer points of TFP, so this notebook starts fairly simply and then gradually works up to more complicated TFP features.  I ran into lots of problems along the way, and I've tried to capture both the processes that helped me identify them and the workarounds I eventually found.  I've tried to include *lots* of detail (including lots of tests to make sure individual steps are correct)."
      ]
    },
    {
      "metadata": {
        "id": "0-qYKi2r0VFr",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "## Why learn TensorFlow Probability?\n",
        "\n",
        "I found TensorFlow Probability appealing for my project for a few reasons:\n",
        "\n",
        "* TensorFlow probability lets you prototype develop complex models interactively in a notebook.  You can break your code up into small pieces that you can test interactively and with unit tests.\n",
        "* Once you're ready to scale up, you can take advantage of all of the infrastructure we have in place for making TensorFlow run on multiple, optimized processors on multiple machines.\n",
        "* Finally, while I really like Stan, I find it quite difficult to debug.  You have to write all your modeling code in a standalone language that has very few tools for letting you poke at your code, inspect intermediate states, and so on.\n",
        "\n",
        "The downside is that TensorFlow Probability is much newer than Stan and PyMC3, so the documentation is a work in progress, and there's lots of functionality that's yet to be built.  Happily, I found TFP's foundation to be solid, and it's designed in a modular way that allows one to extend its functionality fairly straightforwardly.  In this notebook, in addition to solving the case study, I'll show some ways to go about extending TFP."
      ]
    },
    {
      "metadata": {
        "id": "DZ_vkMN0Ti4Z",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "## Who this is for\n",
        "\n",
        "I'm assuming that readers are coming to this notebook with some important prerequisites.  You should:\n",
        "\n",
        "* Know the basics of Bayesian inference.  (If you don't, a really nice first book is *[Statistical Rethinking](http://xcelab.net/rm/statistical-rethinking/)*)\n",
        "* Have some familiarity with an MCMC sampling library, e.g. [Stan](http://mc-stan.org/) / [PyMC3](http://docs.pymc.io/) / [BUGS](https://www.mrc-bsu.cam.ac.uk/software/bugs/)\n",
        "* Have a solid grasp of [NumPy](http://www.numpy.org/)  (One good intro is *[Python for Data Analysis](http://shop.oreilly.com/product/0636920023784.do)*)\n",
        "* Have at least passing familiarity with [TensorFlow](https://www.tensorflow.org/), but not necessarily expertise.  (*[Learning TensorFlow](http://shop.oreilly.com/product/0636920063698.do)* is good, but TensorFlow's rapid evolution means that most books will be a bit dated.  Stanford's [CS20](https://web.stanford.edu/class/cs20si/) course is also good.)"
      ]
    },
    {
      "metadata": {
        "id": "YButn5pt_71w",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "# First attempt\n",
        "\n",
        "Here's my first attempt at the problem.  Spoiler: my solution doesn't work, and it's going to take several attempts to get things right!  Although the process takes awhile, each attempt below has been useful for learning a new part of TFP.\n",
        "\n",
        "One note: TFP doesn't currently implement the inverse Wishart distribution (we'll see at the end how to roll our own inverse Wishart), so instead I'll change the problem to that of estimating a precision matrix using a Wishart prior."
      ]
    },
    {
      "metadata": {
        "id": "tQ_h8ns5Inq-",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "import collections\n",
        "import math\n",
        "import os\n",
        "import time\n",
        "\n",
        "import numpy as np\n",
        "import pandas as pd\n",
        "import scipy\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "import tensorflow as tf\n",
        "import tensorflow_probability as tfp\n",
        "tfd = tfp.distributions\n",
        "tfb = tfp.bijectors"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "vnnN2pFUcLlF",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "## Step 1: get the observations together\n",
        "\n",
        "My data here are all synthetic, so this is going to seem a bit tidier than a real-world example.  However, there's no reason you can't generate some synthetic data of your own.\n",
        "\n",
        "**Tip**: Once you've decided on the form of your model, you can pick some parameter values and use your chosen model to generate some synthetic data.  As a sanity check of your implementation, you can then verify that your estimates include the true values of the parameters you chose.  To make your debugging / testing cycle faster, you might consider a simplified version of your model (e.g. use fewer dimensions or fewer samples).\n",
        "\n"
      ]
    },
    {
      "metadata": {
        "id": "1ykrVMrWPN_3",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "**Tip:** It's easiest to work with your observations as NumPy arrays.  One important thing to note is that NumPy by default uses float64's, while TensorFlow by default uses float32's. \n",
        "\n",
        "In general, TensorFlow operations want all arguments to have the same type, and you have to do explicit data casting to change types.  If you use float64 observations, you'll need to add in a lot of cast operations.  NumPy, in contrast, will take care of casting automatically.  Hence, **it is *much* easier to convert your Numpy data into float32 than it is to force TensorFlow to use float64.** "
      ]
    },
    {
      "metadata": {
        "id": "JG4jAba4TPxm",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Choose some parameter values"
      ]
    },
    {
      "metadata": {
        "id": "z4lSqTGHKAyf",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# We're assuming 2-D data with a known true mean of (0, 0)\n",
        "true_mean = np.zeros([2], dtype=np.float32)\n",
        "# We'll make the 2 coordinates correlated\n",
        "true_cor = np.array([[1.0, 0.9], [0.9, 1.0]], dtype=np.float32)\n",
        "# And we'll give the 2 coordinates different variances\n",
        "true_var = np.array([4.0, 1.0], dtype=np.float32)\n",
        "# Combine the variances and correlations into a covariance matrix\n",
        "true_cov = np.expand_dims(np.sqrt(true_var), axis=1).dot(\n",
        "    np.expand_dims(np.sqrt(true_var), axis=1).T) * true_cor\n",
        "# We'll be working with precision matrices, so we'll go ahead and compute the\n",
        "# true precision matrix here\n",
        "true_precision = np.linalg.inv(true_cov)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "ayainGqrY193",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 68
        },
        "outputId": "37d7b2e1-04f6-41a8-e105-f14e678bba08"
      },
      "cell_type": "code",
      "source": [
        "# Here's our resulting covariance matrix\n",
        "print true_cov\n",
        "# Verify that it's positive definite, since np.random.multivariate_normal\n",
        "# complains about it not being positive definite for some reason.\n",
        "# (Note that I'll be including a lot of sanity checking code in this notebook -\n",
        "# it's a *huge* help for debugging)\n",
        "print 'eigenvalues: ', np.linalg.eigvals(true_cov)"
      ],
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "[[4.  1.8]\n",
            " [1.8 1. ]]\n",
            "eigenvalues:  [4.843075   0.15692513]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "ef--FDjZTTlu",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Generate some synthetic observations\n",
        "\n",
        "Note that **TensorFlow Probability uses the convention that the initial dimension(s) of your data represent sample indices, and the final dimension(s) of your data represent the dimensionality of your samples.**\n",
        "\n",
        "Here we want 100 samples, each of which is a vector of length 2.  We'll generate an array `my_data` with shape (100, 2).  `my_data[i, :]` is the $i$th sample, and it is a vector of length 2.\n",
        "\n",
        "(Remember to make `my_data` have type float32!)"
      ]
    },
    {
      "metadata": {
        "id": "XjHoAXOlXbYi",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# Set the seed so the results are reproducible.\n",
        "np.random.seed(123)\n",
        "\n",
        "# Now generate some observations of our random variable.\n",
        "# (Note that I'm suppressing a bunch of spurious about the covariance matrix\n",
        "# not being positive semidefinite via check_valid='ignore' because it really is\n",
        "# positive definite!)\n",
        "my_data = np.random.multivariate_normal(\n",
        "    mean=true_mean, cov=true_cov, size=100,\n",
        "    check_valid='ignore').astype(np.float32)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "AfkzrIrfMRVv",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        },
        "outputId": "20ca4eb4-e683-4c20-da53-2a0146bf46cf"
      },
      "cell_type": "code",
      "source": [
        "my_data.shape"
      ],
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(100, 2)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 7
        }
      ]
    },
    {
      "metadata": {
        "id": "Ffvyw94VTVoP",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Sanity check the observations\n",
        "\n",
        "One potential source of bugs is messing up your synthetic data!  Let's do some simple checks."
      ]
    },
    {
      "metadata": {
        "id": "uDh3-gy_n7De",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 347
        },
        "outputId": "3d34157a-3913-43c2-b989-16eb7dab8dcd"
      },
      "cell_type": "code",
      "source": [
        "# Do a scatter plot of the observations to make sure they look like what we\n",
        "# expect (higher variance on the x-axis, y values strongly correlated with x)\n",
        "plt.scatter(my_data[:, 0], my_data[:, 1], alpha=0.75)\n",
        "plt.show()"
      ],
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n190yUQKDAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7f350bbc6650>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "metadata": {
        "id": "sz_9MTzgTfDZ",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 51
        },
        "outputId": "afd81a87-6866-4039-b90f-f5c2c185da4e"
      },
      "cell_type": "code",
      "source": [
        "print 'mean of observations:', np.mean(my_data, axis=0)\n",
        "print 'true mean:', true_mean"
      ],
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "mean of observations: [-0.2400961  -0.16638891]\n",
            "true mean: [0. 0.]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "YHVcvZC-UErO",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 119
        },
        "outputId": "539ac047-9b51-4ddf-e3f6-0df01774d9dd"
      },
      "cell_type": "code",
      "source": [
        "print 'covariance of observations:\\n', np.cov(my_data, rowvar=False)\n",
        "print 'true covariance:\\n', true_cov"
      ],
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "covariance of observations:\n",
            "[[3.95307663 1.68718485]\n",
            " [1.68718485 0.9491028 ]]\n",
            "true covariance:\n",
            "[[4.  1.8]\n",
            " [1.8 1. ]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "ROazOrWF6E3v",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "Ok, our samples look reasonble.  Next step."
      ]
    },
    {
      "metadata": {
        "id": "cy2HhmCU4NZW",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "## Step 2: Implement the likelihood function in NumPy\n",
        "\n",
        "The main thing we'll need to write to perform our MCMC sampling in TF Probability is a log likelihood function.  In general it's a bit trickier to write TF than NumPy, so I find it helpful to do an initial implementation in NumPy.  I'm going to split the likelihood function into 2 pieces, a data likelihood function that corresponds to $P(data | parameters)$ and a prior likelihood function that corresponds to $P(parameters)$.\n",
        "\n",
        "Note that these NumPy functions don't have to be super optimized / vectorized since the goal is just to generate some values for testing.  Correctness is the key consideration!"
      ]
    },
    {
      "metadata": {
        "id": "Dn2KwT6y_20l",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "First we'll implement the data log likelihood piece.  That's pretty straightforward.  The one thing to remember is that we're going to be working with precision matrices, so we'll parameterize accordingly."
      ]
    },
    {
      "metadata": {
        "id": "L1AvLoipOFhA",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        },
        "outputId": "a21751c0-8b06-48f1-ccbf-c909453f7383"
      },
      "cell_type": "code",
      "source": [
        "def log_lik_data_numpy(precision, data):\n",
        "  # np.linalg.inv is a really inefficient way to get the covariance matrix, but\n",
        "  # remember we don't care about speed here\n",
        "  cov = np.linalg.inv(precision)\n",
        "  rv = scipy.stats.multivariate_normal(true_mean, cov)\n",
        "  return np.sum(rv.logpdf(data))\n",
        "\n",
        "# test case: compute the log likelihood of the data given the true parameters\n",
        "log_lik_data_numpy(true_precision, my_data)"
      ],
      "execution_count": 11,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "-280.81821355532696"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 11
        }
      ]
    },
    {
      "metadata": {
        "id": "KT3aTEydWseU",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "We're going to use a Wishart prior for the precision matrix since there's an analytical solution for the posterior (see [Wikipedia's handy table of conjugate priors](https://en.wikipedia.org/wiki/Conjugate_prior#Continuous_distributions)).\n",
        "\n",
        "The [Wishart distribution](https://en.wikipedia.org/wiki/Wishart_distribution) has 2 parameters: \n",
        "\n",
        "* the number of *degrees of freedom* (labeled $\\nu$ in Wikipedia)\n",
        "* a *scale matrix* (labeled $V$ in Wikipedia)\n",
        "\n",
        "The mean for a Wishart distribution with parameters $\\nu, V$ is $E[W] = \\nu V$, and the variance is $\\text{Var}(W_{ij}) = \\nu(v_{ij}^2+v_{ii}v_{jj})$\n",
        "\n",
        "Some useful intuition: You can generate a Wishart sample by generating $\\nu$ independent draws $x_1 \\ldots x_{\\nu}$ from a multivariate normal random variable with mean 0 and covariance $V$ and then forming the sum $W = \\sum_{i=1}^{\\nu} x_i x_i^T$.\n",
        "\n",
        "If you rescale Wishart samples by dividing them by $\\nu$, you get the sample covariance matrix of the $x_i$.  This sample covariance matrix should tend toward $V$ as $\\nu$ increases.  When $\\nu$ is small, there is lots of variation in the sample covariance matrix, so small values of $\\nu$ correspond to weaker priors and large values of $\\nu$ correspond to stronger priors.  Note that $\\nu$ must be at least as large as the dimension of the space you're sampling or you'll generate singular matrices.\n",
        "\n",
        "We'll use $\\nu = 3$ so we have a weak prior, and we'll take $V = \\frac{1}{\\nu} I$ which will pull our covariance estimate toward the identity (recall that the mean is $\\nu V$)."
      ]
    },
    {
      "metadata": {
        "id": "z6PB7bdt4vSL",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        },
        "outputId": "4b70197f-dbd9-4f33-85ac-cd0f3961ca33"
      },
      "cell_type": "code",
      "source": [
        "PRIOR_DF = 3\n",
        "PRIOR_SCALE = np.eye(2, dtype=np.float32) / PRIOR_DF\n",
        "\n",
        "def log_lik_prior_numpy(precision):\n",
        "  rv = scipy.stats.wishart(df=PRIOR_DF, scale=PRIOR_SCALE)\n",
        "  return rv.logpdf(precision)\n",
        "\n",
        "# test case: compute the prior for the true parameters\n",
        "log_lik_prior_numpy(true_precision)"
      ],
      "execution_count": 12,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "-9.103606346649766"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 12
        }
      ]
    },
    {
      "metadata": {
        "id": "Dj6vEWta6Nvn",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "The Wishart distribution is the conjugate prior for estimating the precision matrix of a multivariate normal with known mean $\\mu$.\n",
        "\n",
        "Suppose the prior Wishart parameters are $\\nu, V$ and that we have $n$ observations of our multivariate normal, $x_1, \\ldots, x_n$.  The posterior parameters are $n + \\nu, \\left(V^{-1} + \\sum_{i=1}^n (x_i-\\mu)(x_i-\\mu)^T \\right)^{-1}$.\n",
        "\n",
        "\n"
      ]
    },
    {
      "metadata": {
        "id": "ibgUDLfImeZy",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "n = my_data.shape[0]\n",
        "nu_prior = PRIOR_DF\n",
        "v_prior = PRIOR_SCALE\n",
        "nu_posterior = nu_prior + n\n",
        "v_posterior = np.linalg.inv(np.linalg.inv(v_prior) + my_data.T.dot(my_data))\n",
        "posterior_mean = nu_posterior * v_posterior\n",
        "v_post_diag = np.expand_dims(np.diag(v_posterior), axis=1)\n",
        "posterior_sd = np.sqrt(nu_posterior *\n",
        "                       (v_posterior ** 2.0 + v_post_diag.dot(v_post_diag.T)))"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "PKY0FtnjsGY-",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "A quick plot of the posteriors and the true values.  Note that the posteriors are close to the sample posteriors but are shrunk a bit toward the identity.  Note also that the true values are pretty far from the mode of the posterior - presumably this is because prior isn't a very good match for our data.  In a real problem we'd likely do better with something like a scaled inverse Wishart prior for the covariance (see, for example, Andrew Gelman's [commentary](http://andrewgelman.com/2012/08/22/the-scaled-inverse-wishart-prior-distribution-for-a-covariance-matrix-in-a-hierarchical-model/) on the subject), but then we wouldn't have a nice analytic posterior."
      ]
    },
    {
      "metadata": {
        "id": "cviEd4bbeUQi",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 606
        },
        "outputId": "0c59a020-5f4c-4ac7-f04f-128cbab0bd94"
      },
      "cell_type": "code",
      "source": [
        "sample_precision = np.linalg.inv(np.cov(my_data, rowvar=False, bias=False))\n",
        "fig, axes = plt.subplots(2, 2)\n",
        "fig.set_size_inches(10, 10)\n",
        "for i in range(2):\n",
        "  for j in range(2):\n",
        "    ax = axes[i, j]\n",
        "    loc = posterior_mean[i, j]\n",
        "    scale = posterior_sd[i, j]\n",
        "    xmin = loc - 3.0 * scale\n",
        "    xmax = loc + 3.0 * scale\n",
        "    x = np.linspace(xmin, xmax, 1000)\n",
        "    y = scipy.stats.norm.pdf(x, loc=loc, scale=scale)\n",
        "    ax.plot(x, y)\n",
        "    ax.axvline(true_precision[i, j], color='red', label='True precision')\n",
        "    ax.axvline(sample_precision[i, j], color='red', linestyle=':', label='Sample precision')\n",
        "    ax.set_title('precision[%d, %d]' % (i, j))\n",
        "plt.legend()\n",
        "plt.show()"
      ],
      "execution_count": 14,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nUgAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7f350931f990>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "metadata": {
        "id": "DxOs98_0Cvqz",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "## Step 3: Implement the likelihood function in TensorFlow\n",
        "\n",
        "Spoiler: Our first attempt isn't going to work; we'll talk about why below."
      ]
    },
    {
      "metadata": {
        "id": "NTYyufXBLOyV",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "**Tip**: use TensorFlow eager mode when developing your likelihood functions.  Eager mode makes TF behave more like NumPy - everything executes immediately, so you can debug interactively instead of having to use `Session.run()`.  See the notes [here](https://www.tensorflow.org/programmers_guide/eager)."
      ]
    },
    {
      "metadata": {
        "id": "iknSYSm5y73U",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Preliminary: Distribution classes\n",
        "\n",
        "TFP has a collection of distribution classes that we'll use to generate our log probabilities.  One thing to note is that these classes work with tensors of samples rather than just single samples - this allows for vectorization and related speedups.\n",
        "\n",
        "A distribution can work with a tensor of samples in 2 different ways.  It's simplest to illustrate these 2 ways with a concrete example involving a distribution with a single scalar paramter.  I'll use the [Poisson](https://www.tensorflow.org/probability/api_docs/python/tfp/distributions/Poisson) distribution, which has a `rate` parameter. \n",
        "* If we create a Poisson with a single value for the `rate` parameter, a call to its `sample()` method return a single value.  This value is called an **`event`**, and in this case the events are all scalars.\n",
        "* If we create a Poisson with a tensor of values for the `rate` parameter, a call to its `sample()`method now returns multiple values, one for each value in the rate tensor.  The object acts as a *collection* of independent Poissons, each with its own rate, and each of the values returned by a call to `sample()` corresponds to one of these Poissons.  This collection of independent *but not identically distributed* events is called a **`batch`**.\n",
        "* The `sample()` method takes a `sample_shape` parameter which defaults to an empty tuple.  Passing a non-empty value for `sample_shape` results in sample returning multiple batches.  This collection of batches is called a **`sample`**.\n",
        "\n",
        "A distribution's `log_prob()` method consumes data in a manner that parallels how `sample()` generates it.  `log_prob()` returns probabilities for samples, i.e. for multiple, independent batches of events.\n",
        "  * If we have our Poisson object that was created with a scalar `rate`, each batch is a scalar, and if we pass in a tensor of samples, we'll get out a tensor of the same size of log probabilities.\n",
        "  * If we have our Poisson object that was created with a tensor of shape `T` of `rate` values, each batch is a tensor of shape `T`.  If we pass in a tensor of samples of shape D, T, we'll get out a tensor of log probabilities of shape D, T.\n",
        "\n",
        "Below are some examples that illustrate these cases.  See [this notebook](https://github.com/tensorflow/probability/blob/master/tensorflow_probability/examples/jupyter_notebooks/Understanding_TensorFlow_Distributions_Shapes.ipynb) for a more detailed tutorial on events, batches, and shapes.\n",
        "\n",
        "\n"
      ]
    },
    {
      "metadata": {
        "id": "E79nKqufBPu2",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "A few conventions I'll be using in this notebook:\n",
        "1. In general I'll create **new graphs for individual cells**.  That way cells are self-contained, and operations I create in one cell won't have side effects in other cells.\n",
        "2. I'll **separate graph construction from execution**.  Cells will have the form:\n",
        "  ```\n",
        "  \n",
        "  with tf.Graph().as_default() as g:\n",
        "     # construct my local graph\n",
        "     ...\n",
        "    g.finalize()  # make sure the graph doesn't change after construction\n",
        "\n",
        "  with tf.Session(graph=g) as sess:\n",
        "    # run my graph\n",
        "   ```\n",
        "3. I'll use **underscores at the end of variable names to indicate they contain the output of the TensorFlow operation without the underscore**.  For example:\n",
        "  ```\n",
        "  x = tf.add(y, z)  # x is a TensorFlow operation\n",
        "  x_ = sess.run(x)  # x_ is the output of the operation x\n",
        "  ```\n",
        " "
      ]
    },
    {
      "metadata": {
        "id": "2zAnT8GL534f",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 51
        },
        "outputId": "59903103-6dca-4460-ac81-7f040d1c9a54"
      },
      "cell_type": "code",
      "source": [
        "with tf.Graph().as_default() as g:\n",
        "  # case 1: get log probabilities for a vector of iid draws from a single\n",
        "  # normal distribution\n",
        "  norm1 = tfd.Normal(loc=0., scale=1.)\n",
        "  probs1 = norm1.log_prob(tf.constant([1., 0.5, 0.]))\n",
        "\n",
        "  # case 2: get log probabilities for a vector of independent draws from\n",
        "  # multiple normal distributions with different parameters.  Note the vector\n",
        "  # values for loc and scale in the Normal constructor.\n",
        "  norm2 = tfd.Normal(loc=[0., 2., 4.], scale=[1., 1., 1.])\n",
        "  probs2 = norm2.log_prob(tf.constant([1., 0.5, 0.]))\n",
        "\n",
        "  g.finalize()\n",
        "  \n",
        "with tf.Session(graph=g) as sess:\n",
        "  print 'iid draws from a single normal:', sess.run(probs1)\n",
        "\n",
        "  print 'draws from a batch of normals:', sess.run(probs2)"
      ],
      "execution_count": 15,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "iid draws from a single normal: [-1.4189385 -1.0439385 -0.9189385]\n",
            "draws from a batch of normals: [-1.4189385 -2.0439386 -8.918939 ]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "yjGMitya49UN",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Data log likelihood\n",
        "\n",
        "First we'll implement the data log likelihood function."
      ]
    },
    {
      "metadata": {
        "id": "Nz1G3OviHpwg",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "Note: distributions can validate their input, but they don't do so by default.  We'll definitely want to turn on validation while we're debugging!  Once everything is working, we can turn validation off if speed is really critical."
      ]
    },
    {
      "metadata": {
        "id": "9ITlkvOvHkX5",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "VALIDATE_ARGS = True\n",
        "ALLOW_NAN_STATS = False"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "2GzEpvNgatAU",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "One key difference from the NumPy case is that our TensorFlow likelihood function will need to handle vectors of precision matrices rather than just single matrices.  Vectors of parameters will be used when we sample from multiple chains.\n",
        "\n",
        "We'll create a distribution object that works with a batch of precision matrices (i.e. one matrix per chain).\n",
        "\n",
        "When computing log probabilities of our data, we'll need our data to be replicated in the same manner as our parameters so that there is one copy per batch variable.  The shape of our replicated data will need to be as follows:\n",
        "\n",
        "`[sample shape, batch shape, event shape]`\n",
        "\n",
        "In our case, the event shape is 2 (since we are working with 2-D Gaussians).  The sample shape is 100, since we have 100 samples.  The batch shape will just be the number of precision matrices we're working with.  It's wasteful to replicate the data each time we call the likelihood function, so we'll replicate the data in advance and pass in the replicated version.\n",
        "\n",
        "Note that this is an inefficient implementation: `MultivariateNormalFullCovariance` is expensive relative to some alternatives that we'll talk about in the optimization section at the end."
      ]
    },
    {
      "metadata": {
        "id": "GJB5wJ1IEsBu",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "def log_lik_data(precisions, replicated_data):\n",
        "  n = tf.shape(precisions)[0]  # number of precision matrices\n",
        "  # We're estimating a precision matrix; we have to invert to get log\n",
        "  # probabilities.  Cholesky inversion should be relatively efficient,\n",
        "  # but as we'll see later, it's even better if we can avoid doing the Cholesky\n",
        "  # decomposition altogether.\n",
        "  precisions_cholesky = tf.cholesky(precisions)\n",
        "  covariances = tf.cholesky_solve(precisions_cholesky,\n",
        "                                  tf.eye(2, batch_shape=[n]))\n",
        "  rv_data = tfd.MultivariateNormalFullCovariance(\n",
        "      loc=tf.zeros([n, 2]),\n",
        "      covariance_matrix=covariances,\n",
        "      validate_args=VALIDATE_ARGS,\n",
        "      allow_nan_stats=ALLOW_NAN_STATS)\n",
        "\n",
        "  return tf.reduce_sum(rv_data.log_prob(replicated_data), axis=0)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "cIUPgDtEeM8L",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        },
        "outputId": "429200e7-e7d5-480e-bb74-8a5351602675"
      },
      "cell_type": "code",
      "source": [
        "# For our test, we'll use a tensor of 2 precision matrices.\n",
        "# We'll need to replicate our data for the likelihood function.\n",
        "# Remember, TFP wants the data to be structured so that the sample dimensions\n",
        "# are first (100 here), then the batch dimensions (2 here because we have 2\n",
        "# precision matrices), then the event dimensions (2 because we have 2-D\n",
        "# Gaussian data).  We'll need to add a middle dimension for the batch using\n",
        "# expand_dims, and then we'll need to create 2 replicates in this new dimension\n",
        "# using tile.\n",
        "n = 2\n",
        "replicated_data = np.tile(np.expand_dims(my_data, axis=1), reps=[1, 2, 1])\n",
        "print replicated_data.shape"
      ],
      "execution_count": 18,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "(100, 2, 2)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "eFZ-bNCrgcDf",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "**Tip:**  One thing I've found to be extremely helpful is writing little sanity checks of my TensorFlow functions.  It's really easy to mess up the vectorization in TF, so having the simpler NumPy functions around is a great way to verify the TF output.  Think of these as little unit tests."
      ]
    },
    {
      "metadata": {
        "id": "msBv3Kn7J8Oy",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 119
        },
        "outputId": "e6366c0b-c293-4742-e274-6717d3f1e24e"
      },
      "cell_type": "code",
      "source": [
        "# check against the numpy implementation\n",
        "with tf.Graph().as_default() as g:\n",
        "  precisions = np.stack([np.eye(2, dtype=np.float32), true_precision])\n",
        "  n = precisions.shape[0]\n",
        "  lik_tf = log_lik_data(precisions, replicated_data=replicated_data)\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  lik_tf_ = sess.run(lik_tf)\n",
        "  for i in range(n):\n",
        "    print i\n",
        "    print 'numpy:', log_lik_data_numpy(precisions[i], my_data)\n",
        "    print 'tensorflow:', lik_tf_[i]"
      ],
      "execution_count": 19,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "0\n",
            "numpy: -430.7121579578563\n",
            "tensorflow: -430.71204\n",
            "1\n",
            "numpy: -280.81821355532696\n",
            "tensorflow: -280.8182\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "y41-jXuMc0K-",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Prior log likelihood\n",
        "\n",
        "The prior is easier since we don't have to worry about data replication."
      ]
    },
    {
      "metadata": {
        "id": "dIzU4zNxEQPQ",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "def log_lik_prior(precisions):\n",
        "  rv_precision = tfd.Wishart(\n",
        "      df=PRIOR_DF,\n",
        "      scale=PRIOR_SCALE,\n",
        "      validate_args=VALIDATE_ARGS,\n",
        "      allow_nan_stats=ALLOW_NAN_STATS)\n",
        "  return rv_precision.log_prob(precisions)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "e_RP9kLBdByx",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 119
        },
        "outputId": "4306b1da-15bb-4c72-c106-5c166f324435"
      },
      "cell_type": "code",
      "source": [
        "# check against the numpy implementation\n",
        "with tf.Graph().as_default() as g:\n",
        "  precisions = np.stack([np.eye(2, dtype=np.float32), true_precision])\n",
        "  n = precisions.shape[0]\n",
        "  lik_tf = log_lik_prior(precisions)\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  lik_tf_ = sess.run(lik_tf)\n",
        "  for i in range(n):\n",
        "    print i\n",
        "    print 'numpy:', log_lik_prior_numpy(precisions[i])\n",
        "    print 'tensorflow:', lik_tf_[i]"
      ],
      "execution_count": 21,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "0\n",
            "numpy: -2.2351873809649625\n",
            "tensorflow: -2.2351875\n",
            "1\n",
            "numpy: -9.103606346649766\n",
            "tensorflow: -9.103608\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "bwIARwvykZDZ",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Build the joint log likelihood function\n",
        "\n",
        "The data log likelihood function above depends on our observations, but the sampler won't have those.  We can get rid of the dependency without using a global variable by using a [closure](https://en.wikipedia.org/wiki/Closure_(computer_programming).  Closures involve an outer function that build an environment containing variables needed by an inner function."
      ]
    },
    {
      "metadata": {
        "id": "Ps6teXnZluC5",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "def get_log_lik(data, n_chains=1):\n",
        "  # The data argument that is passed in will be available to the inner function\n",
        "  # below so it doesn't have to be passed in as a parameter.\n",
        "  replicated_data = np.tile(np.expand_dims(data, axis=1), reps=[1, n_chains, 1])\n",
        "\n",
        "  def _log_lik(precision):\n",
        "    return log_lik_data(precision, replicated_data) + log_lik_prior(precision)\n",
        "\n",
        "  return _log_lik"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "Pg12dpHNkSny",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "## Step 4: Sample\n",
        "\n",
        "Ok, time to sample!  To keep things simple, we'll just use 1 chain and we'll use the identity matrix as the starting point.  We'll do things more carefully later.\n",
        "\n",
        "Again, this isn't going to work - we'll get an exception."
      ]
    },
    {
      "metadata": {
        "id": "1ThOyNvXkW6m",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 190
        },
        "outputId": "f44e668d-294a-42cf-9f34-259a08b1b38d"
      },
      "cell_type": "code",
      "source": [
        "with tf.Graph().as_default() as g:\n",
        "  # Use expand_dims because we want to pass in a tensor of starting values\n",
        "  init_precision = tf.expand_dims(tf.eye(2), axis=0)\n",
        "  log_lik_fn = get_log_lik(my_data, n_chains=1)\n",
        "\n",
        "  # we'll just do a few steps here\n",
        "  num_results = 10\n",
        "  num_burnin_steps = 10\n",
        "\n",
        "  states, kernel_results = tfp.mcmc.sample_chain(\n",
        "      num_results=num_results,\n",
        "      num_burnin_steps=num_burnin_steps,\n",
        "      current_state=[\n",
        "          init_precision,\n",
        "      ],\n",
        "      kernel=tfp.mcmc.HamiltonianMonteCarlo(\n",
        "          target_log_prob_fn=log_lik_fn,\n",
        "          step_size=0.1,\n",
        "          num_leapfrog_steps=3,\n",
        "          seed=123),\n",
        "      parallel_iterations=1)\n",
        "  \n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  tf.set_random_seed(123)\n",
        "\n",
        "  try:\n",
        "    states_, kernel_results_ = sess.run([states, kernel_results])\n",
        "  except Exception, e:\n",
        "    # shorten the giant stack trace\n",
        "    lines = str(e).split('\\n')\n",
        "    print '\\n'.join(lines[:5]+['...']+lines[-3:])"
      ],
      "execution_count": 23,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Cholesky decomposition was not successful. The input might not be valid.\n",
            "\t [[Node: mcmc_sample_chain/scan/while/while/mh_one_step/hmc_kernel_one_step/while/hmc_leapfrog_integrator_one_step/maybe_call_fn_and_grads/value_and_gradients/Wishart/log_prob/Cholesky = Cholesky[T=DT_FLOAT, _device=\"/job:localhost/replica:0/task:0/device:CPU:0\"](mcmc_sample_chain/scan/while/while/mh_one_step/hmc_kernel_one_step/while/hmc_leapfrog_integrator_one_step/add_1)]]\n",
            "\n",
            "Caused by op u'mcmc_sample_chain/scan/while/while/mh_one_step/hmc_kernel_one_step/while/hmc_leapfrog_integrator_one_step/maybe_call_fn_and_grads/value_and_gradients/Wishart/log_prob/Cholesky', defined at:\n",
            "  File \"/usr/lib/python2.7/runpy.py\", line 174, in _run_module_as_main\n",
            "...\n",
            "InvalidArgumentError (see above for traceback): Cholesky decomposition was not successful. The input might not be valid.\n",
            "\t [[Node: mcmc_sample_chain/scan/while/while/mh_one_step/hmc_kernel_one_step/while/hmc_leapfrog_integrator_one_step/maybe_call_fn_and_grads/value_and_gradients/Wishart/log_prob/Cholesky = Cholesky[T=DT_FLOAT, _device=\"/job:localhost/replica:0/task:0/device:CPU:0\"](mcmc_sample_chain/scan/while/while/mh_one_step/hmc_kernel_one_step/while/hmc_leapfrog_integrator_one_step/add_1)]]\n",
            "\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "je9NrE27snQG",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Identifying the problem\n",
        "\n",
        "`InvalidArgumentError (see above for traceback): Cholesky decomposition was not successful. The input might not be valid.`  That's not super helpful.  Let's see if we can find out more about what happened.\n",
        "\n",
        "* We'll print out the parameters for each step so we can see the value for which things fail\n",
        "* We'll add some assertions to guard against specific problems.\n",
        "\n",
        "Assertions are tricky because they're TensorFlow operations, and we have to take care that they get executed and don't get optimized out of the graph.  It's worth reading [this overview](https://wookayin.github.io/tensorflow-talk-debugging/#1) of TensorFlow debugging if you aren't familiar with TF assertions.  You can explicitly force assertions to execute using `tf.control_dependencies` (see the comments in the code below).\n",
        "\n",
        "TensorFlow's native `Print` function has the same behavior as assertions - it's an operation, and you need to take some care to ensure that it executes.  `Print` causes additional headaches when we're working in a notebook: its output is sent to `stderr`, and `stderr` isn't displayed in the cell.  We'll use a trick here: instead of using `tf.Print`, we'll create our own TensorFlow print operation via `tf.pyfunc`.  As with assertions, we have to make sure our method executes.\n"
      ]
    },
    {
      "metadata": {
        "id": "ZWg3y5KU_mg9",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "def get_log_lik_verbose(data, n_chains=1):\n",
        "  # The data argument that is passed in will be available to the inner function\n",
        "  # below so it doesn't have to be passed in as a parameter.\n",
        "  replicated_data = np.tile(np.expand_dims(data, axis=1), reps=[1, n_chains, 1])\n",
        "\n",
        "  def _log_lik(precisions):\n",
        "    # An internal method we'll make into a TensorFlow operation via tf.py_func\n",
        "    def _print_precisions(precisions):\n",
        "      print 'precisions:\\n', precisions\n",
        "      return False  # operations must return something!\n",
        "    # Turn our method into a TensorFlow operation\n",
        "    print_op = tf.py_func(_print_precisions, [precisions], tf.bool)\n",
        "\n",
        "    # Assertions are also operations, and some care needs to be taken to ensure\n",
        "    # that they're executed\n",
        "    assert_op = tf.assert_equal(\n",
        "        precisions, tf.transpose(precisions, perm=[0, 2, 1]), data=[precisions],\n",
        "        message='not symmetrical', summarize=4, name='symmetry_check')\n",
        "\n",
        "    # The control_dependencies statement forces its arguments to be executed\n",
        "    # before subsequent operations\n",
        "    with tf.control_dependencies([print_op, assert_op]):\n",
        "      return (log_lik_data(precisions, replicated_data) +\n",
        "              log_lik_prior(precisions))\n",
        "\n",
        "  return _log_lik"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "znG_AtTR7qob",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 292
        },
        "outputId": "ccae3fb5-c5c6-4f0b-bff2-556bbcabdade"
      },
      "cell_type": "code",
      "source": [
        "with tf.Graph().as_default() as g:\n",
        "  tf.set_random_seed(123)\n",
        "  init_precision = tf.expand_dims(tf.eye(2), axis=0)\n",
        "  log_lik_fn = get_log_lik_verbose(my_data)\n",
        "\n",
        "  # we'll just do a few steps here\n",
        "  num_results = 10\n",
        "  num_burnin_steps = 10\n",
        "\n",
        "  states, kernel_results = tfp.mcmc.sample_chain(\n",
        "      num_results=num_results,\n",
        "      num_burnin_steps=num_burnin_steps,\n",
        "      current_state=[\n",
        "          init_precision,\n",
        "      ],\n",
        "      kernel=tfp.mcmc.HamiltonianMonteCarlo(\n",
        "          target_log_prob_fn=log_lik_fn,\n",
        "          step_size=0.1,\n",
        "          num_leapfrog_steps=3,\n",
        "          seed=123),\n",
        "      parallel_iterations=1)\n",
        "  \n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  try:\n",
        "    states_, kernel_results_ = sess.run([states, kernel_results])\n",
        "  except Exception, e:\n",
        "    # shorten the giant stack trace\n",
        "    lines = str(e).split('\\n')\n",
        "    print '\\n'.join(lines[:5]+['...']+lines[-3:])"
      ],
      "execution_count": 25,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "precisions:\n",
            "[[[1. 0.]\n",
            "  [0. 1.]]]\n",
            "precisions:\n",
            "[[[ 0.17633379 -0.43482423]\n",
            "  [-0.48801905  1.0519004 ]]]\n",
            "assertion failed: [[[0.176333785 -0.434824228][-0.488019049 1.05190039]]]\n",
            "\t [[Node: mcmc_sample_chain/scan/while/while/mh_one_step/hmc_kernel_one_step/while/hmc_leapfrog_integrator_one_step/maybe_call_fn_and_grads/value_and_gradients/symmetry_check/Assert/AssertGuard/Assert = Assert[T=[DT_FLOAT], summarize=4, _device=\"/job:localhost/replica:0/task:0/device:CPU:0\"](mcmc_sample_chain/scan/while/while/mh_one_step/hmc_kernel_one_step/while/hmc_leapfrog_integrator_one_step/maybe_call_fn_and_grads/value_and_gradients/symmetry_check/Assert/AssertGuard/Assert/Switch, mcmc_sample_chain/scan/while/while/mh_one_step/hmc_kernel_one_step/while/hmc_leapfrog_integrator_one_step/maybe_call_fn_and_grads/value_and_gradients/symmetry_check/Assert/AssertGuard/Assert/Switch_1)]]\n",
            "\n",
            "Caused by op u'mcmc_sample_chain/scan/while/while/mh_one_step/hmc_kernel_one_step/while/hmc_leapfrog_integrator_one_step/maybe_call_fn_and_grads/value_and_gradients/symmetry_check/Assert/AssertGuard/Assert', defined at:\n",
            "  File \"/usr/lib/python2.7/runpy.py\", line 174, in _run_module_as_main\n",
            "...\n",
            "InvalidArgumentError (see above for traceback): assertion failed: [[[0.176333785 -0.434824228][-0.488019049 1.05190039]]]\n",
            "\t [[Node: mcmc_sample_chain/scan/while/while/mh_one_step/hmc_kernel_one_step/while/hmc_leapfrog_integrator_one_step/maybe_call_fn_and_grads/value_and_gradients/symmetry_check/Assert/AssertGuard/Assert = Assert[T=[DT_FLOAT], summarize=4, _device=\"/job:localhost/replica:0/task:0/device:CPU:0\"](mcmc_sample_chain/scan/while/while/mh_one_step/hmc_kernel_one_step/while/hmc_leapfrog_integrator_one_step/maybe_call_fn_and_grads/value_and_gradients/symmetry_check/Assert/AssertGuard/Assert/Switch, mcmc_sample_chain/scan/while/while/mh_one_step/hmc_kernel_one_step/while/hmc_leapfrog_integrator_one_step/maybe_call_fn_and_grads/value_and_gradients/symmetry_check/Assert/AssertGuard/Assert/Switch_1)]]\n",
            "\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "UPBlB7expwuw",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Why this fails\n",
        "\n",
        "The very first new parameter value the sampler tries is an asymmetrical matrix.  That causes the Cholesky decomposition to fail, since it's only defined for symmetrical (and positive definite) matrices.\n",
        "\n",
        "The problem here is that our parameter of interest is a precision matrix, and precision matrices must be real, symmetric, and positive definite.  The sampler doesn't know anything about this constraint (except possibly through gradients), so it is entirely possible that the sampler will propose an invalid value, leading to an exception, particularly if the step size is large.\n",
        "\n",
        "With the Hamiltonian Monte Carlo sampler, we may be able to work around the problem by using a very small step size, since the gradient should keep the parameters away from invalid regions, but small step sizes mean slow convergence.  With a Metropolis-Hastings sampler, which doesn't know anything about gradients, we're doomed."
      ]
    },
    {
      "metadata": {
        "id": "9RmouuKCsaYv",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "# Version 2: reparametrizing to unconstrained parameters\n",
        "\n",
        "There is a straightforward solution to the problem above: we can reparametrize our model such that the new parameters no longer have these constraints.  TFP provides a useful set of tools - bijectors - for doing just that.\n"
      ]
    },
    {
      "metadata": {
        "id": "RGbGGMRs01Sk",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Reparameterization with bijectors\n",
        "\n",
        "Our precision matrix must be real and symmetric; we want an alternative parameterization that doesn't have these constraints.  A starting point is a Cholesky factorization of the precision matrix.  The Cholesky factors are still constrained - they are lower triangular, and their diagonal elements must be positive.  However, if we take the log of the diagonals of the Cholesky factor, the logs are no longer are constrained to be positive, and then if we flatten the lower triangular portion into a 1-D vector, we no longer have the lower triangular constraint.  The result in our case will be a length 3 vector with no constraints.\n",
        "\n",
        "(The [Stan manual](http://mc-stan.org/users/documentation/) has a great chapter on using transformations to remove various types of constraints on parameters.)\n",
        "\n",
        "This reparameterization has little effect on our data log likelihood function - we just have to invert our transformation so we get back the precision matrix - but the effect on the prior is more complicated.  We've specified that the probability of a given precision matrix is given by the Wishart distribution; what is the probability of our transformed matrix?\n",
        "\n",
        "Recall that if we apply a monotonic function $g$ to a 1-D random variable $X$, $Y = g(X)$, the density for $Y$ is given by \n",
        "\n",
        "$$\n",
        "f_Y(y) = | \\frac{d}{dy}(g^{-1}(y)) | f_X(g^{-1}(y))\n",
        "$$\n",
        "\n",
        "The derivative of $g^{-1}$ term accounts for the way that $g$ changes local volumes.  For higher dimensional random variables, the corrective factor is the absolute value of the determinant of the Jacobian of $g^{-1}$ (see [here](https://en.wikipedia.org/wiki/Probability_density_function#Dependent_variables_and_change_of_variables)).\n",
        "\n",
        "We'll have to add a Jacobian of the inverse transform into our log prior likelihood function.  Happily, TFP's `Bijector` class can take care of this for us.\n"
      ]
    },
    {
      "metadata": {
        "id": "M8deaPaGI6MZ",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "The [`Bijector`](https://www.tensorflow.org/api_docs/python/tf/distributions/bijectors/Bijector) class is used to represent invertible, smooth functions used for changing variables in probability density functions.  Bijectors all have a `forward()` method that performs a transform, an `inverse()` method that inverts it, and `forward_log_det_jacobian()` and `inverse_log_det_jacobian()` methods that provide the Jacobian corrections we need when we reparaterize a pdf.\n",
        "\n",
        "TFP provides a collection of useful bijectors that we can combine through composition via the [`Chain`](https://www.tensorflow.org/probability/api_docs/python/tfp/bijectors/Chain) operator to form quite complicated transforms.  In our case, we'll compose the following 3 bijectors (the operations in the chain are performed from right to left):\n",
        "\n",
        "1. The first step of our transform is to perform a Cholesky factorization on the precision matrix.  There isn't a Bijector class for that; however, the [`CholeskyOuterProduct`](https://www.tensorflow.org/probability/api_docs/python/tfp/bijectors/CholeskyOuterProduct) bijector takes the product of 2 Cholesky factors.  We can use the inverse of that operation using the [`Invert`](https://www.tensorflow.org/probability/api_docs/python/tfp/bijectors/Invert) operator.\n",
        "2. The next step is to take the log of the diagonal elements of the Cholesky factor.  We accomplish this via the `TransformDiagonal` bijector and the inverse of the [`Exp`](https://www.tensorflow.org/probability/api_docs/python/tfp/bijectors/Exp) bijector.\n",
        "3. Finally we flatten the lower triangular portion of the matrix to a vector using the inverse of the `FillTriangular` bijector."
      ]
    },
    {
      "metadata": {
        "id": "OM4s01mGsjfZ",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# Our transform has 3 stages that we chain together via composition:\n",
        "precision_to_unconstrained = tfb.Chain([\n",
        "    # step 3: flatten the lower triangular portion of the matrix\n",
        "    tfb.Invert(tfb.FillTriangular(validate_args=VALIDATE_ARGS)),\n",
        "    # step 2: take the log of the diagonals    \n",
        "    tfb.TransformDiagonal(tfb.Invert(tfb.Exp(validate_args=VALIDATE_ARGS))),\n",
        "    # step 1: decompose the precision matrix into its Cholesky factors\n",
        "    tfb.Invert(tfb.CholeskyOuterProduct(validate_args=VALIDATE_ARGS)),\n",
        "])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "z7qIfflyn6Bv",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 459
        },
        "outputId": "44c1b468-1f06-4d49-878b-dbb090fa18af"
      },
      "cell_type": "code",
      "source": [
        "# sanity checks\n",
        "with tf.Graph().as_default() as g:\n",
        "  m = tf.constant([[1., 2.], [2., 8.]])\n",
        "  m_fwd = precision_to_unconstrained.forward(m)\n",
        "  m_inv = precision_to_unconstrained.inverse(m_fwd)\n",
        "\n",
        "  # bijectors handle tensors of values, too!\n",
        "  m2 = tf.stack([m, tf.eye(2)])\n",
        "  m2_fwd = precision_to_unconstrained.forward(m2)\n",
        "  m2_inv = precision_to_unconstrained.inverse(m2_fwd)\n",
        "  \n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  m_, m_fwd_, m_inv_ = sess.run([m, m_fwd, m_inv])\n",
        "  print 'single input:'\n",
        "  print 'm:\\n', m_\n",
        "  print 'precision_to_unconstrained(m):\\n', m_fwd_\n",
        "  print 'inverse(precision_to_unconstrained(m)):\\n', m_inv_\n",
        "  print\n",
        "\n",
        "  m2_, m2_fwd_, m2_inv_ = sess.run([m2, m2_fwd, m2_inv])\n",
        "  print 'tensor of inputs:'\n",
        "  print 'm2:\\n', m2_\n",
        "  print 'precision_to_unconstrained(m2):\\n', m2_fwd_\n",
        "  print 'inverse(precision_to_unconstrained(m2)):\\n', m2_inv_"
      ],
      "execution_count": 27,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "single input:\n",
            "m:\n",
            "[[1. 2.]\n",
            " [2. 8.]]\n",
            "precision_to_unconstrained(m):\n",
            "[0.6931472 2.        0.       ]\n",
            "inverse(precision_to_unconstrained(m)):\n",
            "[[1. 2.]\n",
            " [2. 8.]]\n",
            "\n",
            "tensor of inputs:\n",
            "m2:\n",
            "[[[1. 2.]\n",
            "  [2. 8.]]\n",
            "\n",
            " [[1. 0.]\n",
            "  [0. 1.]]]\n",
            "precision_to_unconstrained(m2):\n",
            "[[0.6931472 2.        0.       ]\n",
            " [0.        0.        0.       ]]\n",
            "inverse(precision_to_unconstrained(m2)):\n",
            "[[[1. 2.]\n",
            "  [2. 8.]]\n",
            "\n",
            " [[1. 0.]\n",
            "  [0. 1.]]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "9wVq7AwOKYhd",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "The [`TransformedDistribution`](https://www.tensorflow.org/probability/api_docs/python/tfp/distributions/TransformedDistribution) class automates the process of applying a bijector to a distribution and making the necessary Jacobian correction to `log_prob()`.  Our new prior becomes:"
      ]
    },
    {
      "metadata": {
        "id": "k0pQ7HqrN8aq",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "def log_lik_prior_transformed(transformed_precisions):\n",
        "  rv_precision = tfd.TransformedDistribution(\n",
        "      tfd.Wishart(\n",
        "          df=PRIOR_DF,\n",
        "          scale=PRIOR_SCALE,\n",
        "          validate_args=VALIDATE_ARGS,\n",
        "          allow_nan_stats=ALLOW_NAN_STATS),\n",
        "      bijector=precision_to_unconstrained,\n",
        "      validate_args=VALIDATE_ARGS)\n",
        "  return rv_precision.log_prob(transformed_precisions)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "-ddk6nKoO2tv",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 119
        },
        "outputId": "318f4700-a652-462e-f1fa-8b7f6a24ff8b"
      },
      "cell_type": "code",
      "source": [
        "# Check against the numpy implementation.  Note that when comparing, we need\n",
        "# to add in the Jacobian correction.\n",
        "with tf.Graph().as_default() as g:\n",
        "  precisions = np.stack([np.eye(2, dtype=np.float32), true_precision])\n",
        "  transformed_precisions = precision_to_unconstrained.forward(precisions)\n",
        "  lik_tf = log_lik_prior_transformed(transformed_precisions)\n",
        "  corrections = precision_to_unconstrained.inverse_log_det_jacobian(\n",
        "      transformed_precisions, event_ndims=1)\n",
        "  n = precisions.shape[0]\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  lik_tf_, corrections_ = sess.run([lik_tf, corrections])\n",
        "  for i in range(n):\n",
        "    print i\n",
        "    print 'numpy:', log_lik_prior_numpy(precisions[i]) + corrections_[i]\n",
        "    print 'tensorflow:', lik_tf_[i]"
      ],
      "execution_count": 29,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "0\n",
            "numpy: -0.8488930160357633\n",
            "tensorflow: -0.84889317\n",
            "1\n",
            "numpy: -7.305657151741624\n",
            "tensorflow: -7.305659\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "XaSA9l_UQq9Y",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "We just need to invert the transform for our data log likelihood:\n",
        "\n",
        "`precision = precision_to_unconstrained.inverse(transformed_precision)\n",
        "`\n",
        "\n",
        "Since we actually want the Cholesky factorization of the precision matrix, it would be more efficient to do just a partial inverse here.  However, we'll leave optimization for later and will leave the partial inverse as an exercise for the reader."
      ]
    },
    {
      "metadata": {
        "id": "vM-nF4t2QqSr",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "def log_lik_data_transformed(transformed_precisions, replicated_data):\n",
        "  # We recover the precision matrix by inverting our bijector.  This is\n",
        "  # inefficient since we really want the Cholesky decomposition of the\n",
        "  # precision matrix, and the bijector has that in hand during the inversion,\n",
        "  # but we'll worry about efficiency later.\n",
        "  n = tf.shape(transformed_precisions)[0]\n",
        "  precisions = precision_to_unconstrained.inverse(transformed_precisions)\n",
        "  precisions_cholesky = tf.cholesky(precisions)\n",
        "  covariances = tf.cholesky_solve(precisions_cholesky,\n",
        "                                  tf.eye(2, batch_shape=[n]))\n",
        "  rv_data = tfd.MultivariateNormalFullCovariance(\n",
        "      loc=tf.zeros([n, 2]),\n",
        "      covariance_matrix=covariances,\n",
        "      validate_args=VALIDATE_ARGS,\n",
        "      allow_nan_stats=ALLOW_NAN_STATS)\n",
        "\n",
        "  return tf.reduce_sum(rv_data.log_prob(replicated_data), axis=0)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "WyoYF8AM3d1q",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 119
        },
        "outputId": "3ced3835-dd51-4e9a-f70a-47dc606845c5"
      },
      "cell_type": "code",
      "source": [
        "# sanity check\n",
        "with tf.Graph().as_default() as g:\n",
        "  precisions = np.stack([np.eye(2, dtype=np.float32), true_precision])\n",
        "  transformed_precisions = precision_to_unconstrained.forward(precisions)\n",
        "  lik_tf = log_lik_data_transformed(transformed_precisions, replicated_data)\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  lik_tf_ = sess.run(lik_tf)\n",
        "  for i in range(precisions.shape[0]):\n",
        "    print i\n",
        "    print 'numpy:', log_lik_data_numpy(precisions[i], my_data)\n",
        "    print 'tensorflow:', lik_tf_[i]"
      ],
      "execution_count": 31,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "0\n",
            "numpy: -430.7121579578563\n",
            "tensorflow: -430.71204\n",
            "1\n",
            "numpy: -280.81821355532696\n",
            "tensorflow: -280.8182\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "3w3sMPgITLRM",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "Again we wrap our new functions in a closure."
      ]
    },
    {
      "metadata": {
        "id": "JKWHJFisTIzo",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "def get_log_lik_transformed(data, n_chains=1):\n",
        "  # The data argument that is passed in will be available to the inner function\n",
        "  # below so it doesn't have to be passed in as a parameter.\n",
        "  replicated_data = np.tile(np.expand_dims(data, axis=1), reps=[1, n_chains, 1])\n",
        "\n",
        "  def _log_lik_transformed(transformed_precisions):\n",
        "    return (log_lik_data_transformed(transformed_precisions, replicated_data) +\n",
        "            log_lik_prior_transformed(transformed_precisions))\n",
        "\n",
        "  return _log_lik_transformed"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "Uu1eJSOqiZ3S",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        },
        "outputId": "d755cd8d-9d4b-4355-ba60-341e4c0bd7f2"
      },
      "cell_type": "code",
      "source": [
        "# make sure everything runs\n",
        "with tf.Graph().as_default() as g:\n",
        "  log_lik_fn = get_log_lik_transformed(my_data)\n",
        "  m = tf.expand_dims(tf.eye(2), axis=0)\n",
        "  lik = log_lik_fn(precision_to_unconstrained.forward(m))\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  print sess.run(lik)"
      ],
      "execution_count": 33,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "[-431.56107]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "t-XRDaXcTmX8",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "## Sampling\n",
        "\n",
        "Now that we don't have to worry about our sampler blowing up because of invalid parameter values, let's generate some real samples.\n",
        "\n",
        "The sampler works with the unconstrained version of our parameters, so we need to transform our initial value to its unconstrained version.  The samples that we generate will also all be in their unconstrained form, so we need to transform them back.  Bijectors are vectorized, so it's easy to do so."
      ]
    },
    {
      "metadata": {
        "id": "PFvyLlP_Tbi4",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# We'll choose a proper random initial value this time\n",
        "np.random.seed(123)\n",
        "initial_value_cholesky = np.array(\n",
        "    [[0.5 + np.random.uniform(), 0.0],\n",
        "     [-0.5 + np.random.uniform(), 0.5 + np.random.uniform()]],\n",
        "    dtype=np.float32)\n",
        "initial_value = np.expand_dims(\n",
        "    initial_value_cholesky.dot(initial_value_cholesky.T), axis=0)\n",
        "\n",
        "# The sampler works with unconstrained values, so we'll transform our initial\n",
        "# value\n",
        "with tf.Graph().as_default() as g:\n",
        "  initial_value_transformed = precision_to_unconstrained.forward(initial_value)\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  initial_value_transformed_ = sess.run(initial_value_transformed)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "pUobCu7xTnoa",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# Sample!\n",
        "with tf.Graph().as_default() as g:\n",
        "  tf.set_random_seed(123)\n",
        "  log_lik_fn = get_log_lik_transformed(my_data, n_chains=1)\n",
        "\n",
        "  num_results = 1000\n",
        "  num_burnin_steps = 1000\n",
        "\n",
        "  states, kernel_results = tfp.mcmc.sample_chain(\n",
        "      num_results=num_results,\n",
        "      num_burnin_steps=num_burnin_steps,\n",
        "      current_state=[\n",
        "          initial_value_transformed_,\n",
        "      ],\n",
        "      kernel=tfp.mcmc.HamiltonianMonteCarlo(\n",
        "          target_log_prob_fn=log_lik_fn,\n",
        "          step_size=0.1,\n",
        "          num_leapfrog_steps=3,\n",
        "          seed=123),\n",
        "      parallel_iterations=1)\n",
        "  # transform samples back to their constrained form\n",
        "  precision_samples = precision_to_unconstrained.inverse(states)\n",
        "  \n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  states_, precision_samples_, kernel_results_ = sess.run(\n",
        "      [states, precision_samples, kernel_results])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "I-klSjK2m5mM",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "Let's compare the mean of our sampler's output to the analytic posterior mean!"
      ]
    },
    {
      "metadata": {
        "id": "Xw7VHCMvkPKg",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 119
        },
        "outputId": "595e8f47-77e9-457d-9aab-e96e1625cc9b"
      },
      "cell_type": "code",
      "source": [
        "print 'True posterior mean:\\n', posterior_mean\n",
        "print 'Sample mean:\\n', np.mean(np.reshape(precision_samples_, [-1, 2, 2]), axis=0)"
      ],
      "execution_count": 36,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "True posterior mean:\n",
            "[[ 0.9641778 -1.6534657]\n",
            " [-1.6534657  3.8683152]]\n",
            "Sample mean:\n",
            "[[ 1.4315274  -0.25587553]\n",
            " [-0.25587553  0.5740424 ]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "IXvQbe7JndV-",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "We're way off!  Let's figure out why.  First let's look at our samples."
      ]
    },
    {
      "metadata": {
        "id": "ajQSpMwfnmHr",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 340
        },
        "outputId": "c3ff41b6-417c-4a9a-a13b-0c407f8d03e8"
      },
      "cell_type": "code",
      "source": [
        "np.reshape(precision_samples_, [-1, 2, 2])"
      ],
      "execution_count": 37,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([[[ 1.4315385, -0.2558777],\n",
              "        [-0.2558777,  0.5740494]],\n",
              "\n",
              "       [[ 1.4315385, -0.2558777],\n",
              "        [-0.2558777,  0.5740494]],\n",
              "\n",
              "       [[ 1.4315385, -0.2558777],\n",
              "        [-0.2558777,  0.5740494]],\n",
              "\n",
              "       ...,\n",
              "\n",
              "       [[ 1.4315385, -0.2558777],\n",
              "        [-0.2558777,  0.5740494]],\n",
              "\n",
              "       [[ 1.4315385, -0.2558777],\n",
              "        [-0.2558777,  0.5740494]],\n",
              "\n",
              "       [[ 1.4315385, -0.2558777],\n",
              "        [-0.2558777,  0.5740494]]], dtype=float32)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 37
        }
      ]
    },
    {
      "metadata": {
        "id": "ayxqUbCZnu-l",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "Uh oh - it looks like they all have the same value.  Let's figure out why.\n",
        "\n",
        "The `kernel_results_` variable is a named tuple that gives information about the sampler at each state.  The `is_accepted` field is the key here."
      ]
    },
    {
      "metadata": {
        "id": "grRrCz0kn4D1",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 187
        },
        "outputId": "e41ebfb4-fe0d-48a9-da05-793694e18b11"
      },
      "cell_type": "code",
      "source": [
        "# Look at the acceptance for the last 100 samples\n",
        "print np.squeeze(kernel_results_.is_accepted)[-100:]\n",
        "print 'Fraction of samples accepted:', np.mean(np.squeeze(kernel_results_.is_accepted))"
      ],
      "execution_count": 38,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "[False False False False False False False False False False False False\n",
            " False False False False False False False False False False False False\n",
            " False False False False False False False False False False False False\n",
            " False False False False False False False False False False False False\n",
            " False False False False False False False False False False False False\n",
            " False False False False False False False False False False False False\n",
            " False False False False False False False False False False False False\n",
            " False False False False False False False False False False False False\n",
            " False False False False]\n",
            "Fraction of samples accepted: 0.0\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "_cCibOo-rOG-",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "All our samples were rejected!  Presumably our step size was too big.  I chose `stepsize=0.1` purely arbitrarily.\n"
      ]
    },
    {
      "metadata": {
        "id": "doCMVXNReOBZ",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "# Version 3: sampling with an adaptive step size\n",
        "\n",
        "Since sampling with my arbitrary choice of step size failed, we have a few agenda items:\n",
        "1. implement an adaptive step size, and\n",
        "2. perform some convergence checks.\n",
        "\n",
        "There is some nice sample code in `tensorflow_probability/python/mcmc/hmc.py` for implementing adaptive step sizes.  I've adapted it below.\n",
        "\n",
        "Note that there's a separate `sess.run()` statement for each step.  This is really helpful for debugging, since it allows us to easily add some per-step diagnostics if need be.  For example, we can show incremental progress, time each step, etc.\n",
        "\n",
        "**Tip:** One apparently common way to mess up your sampling is to have your graph grow in the loop.  (The reason for finalizing the graph before the session is run is to prevent just such problems.)  If you haven't been using finalize(), though, a useful debugging check if your code slows to a crawl is to print out the graph size at each step via `len(mygraph.get_operations())` - if the length increases, you're probably doing something bad.\n",
        "\n",
        "We're going to run 3 independent chains here.  Doing some comparisons between the chains will help us check for convergence."
      ]
    },
    {
      "metadata": {
        "id": "xgLX6o9PZRwQ",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# The number of chains is determined by the shape of the initial values.\n",
        "# Here we'll generate 3 chains, so we'll need a tensor of 3 initial values.\n",
        "N_CHAINS = 3\n",
        "\n",
        "np.random.seed(123)\n",
        "\n",
        "initial_values = []\n",
        "for i in range(N_CHAINS):\n",
        "  initial_value_cholesky = np.array(\n",
        "      [[0.5 + np.random.uniform(), 0.0],\n",
        "       [-0.5 + np.random.uniform(), 0.5 + np.random.uniform()]],\n",
        "      dtype=np.float32)\n",
        "  initial_values.append(initial_value_cholesky.dot(initial_value_cholesky.T))\n",
        "initial_values = np.stack(initial_values)\n",
        "\n",
        "# Transform our initial values to their unconstrained form\n",
        "# (Transforming the value in its own session is a workaround for b/72831017)\n",
        "with tf.Graph().as_default() as g:\n",
        "  initial_values_transformed = precision_to_unconstrained.forward(\n",
        "      initial_values)\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  initial_values_transformed_ = sess.run(initial_values_transformed)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "M7A-JG6hwCVu",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 272
        },
        "outputId": "924cb395-2242-43d6-c7f8-d43c3db1df73"
      },
      "cell_type": "code",
      "source": [
        "# Code adapted from tensorflow_probability/python/mcmc/hmc.py\n",
        "with tf.Graph().as_default() as g:\n",
        "  tf.set_random_seed(123)\n",
        "  log_lik_fn = get_log_lik_transformed(my_data)\n",
        "\n",
        "  # Tuning acceptance rates:\n",
        "  dtype = np.float32\n",
        "  num_warmup_iter = 2500\n",
        "  num_chain_iter = 2500\n",
        "\n",
        "  # Set the target average acceptance ratio for the HMC as suggested by\n",
        "  # Beskos et al. (2013):\n",
        "  # https://projecteuclid.org/download/pdfview_1/euclid.bj/1383661192\n",
        "  target_accept_rate = 0.651\n",
        "\n",
        "  x = tf.get_variable(name='x', initializer=initial_values_transformed_)\n",
        "  step_size = tf.get_variable(name='step_size',\n",
        "                              initializer=tf.constant(0.01, dtype=dtype))\n",
        "\n",
        "  # Initialize the HMC sampler.\n",
        "  hmc = tfp.mcmc.HamiltonianMonteCarlo(\n",
        "      target_log_prob_fn=log_lik_fn,\n",
        "      step_size=step_size,\n",
        "      num_leapfrog_steps=3)\n",
        "\n",
        "  # One iteration of the HMC\n",
        "  next_x, other_results = hmc.one_step(\n",
        "      current_state=x,\n",
        "      previous_kernel_results=hmc.bootstrap_results(x))\n",
        "\n",
        "  x_update = x.assign(next_x)\n",
        "  precision = precision_to_unconstrained.inverse(x_update)\n",
        "\n",
        "  # Adapt the step size using standard adaptive MCMC procedure. See Section 4.2\n",
        "  # of Andrieu and Thoms (2008):\n",
        "  # http://www4.ncsu.edu/~rsmith/MA797V_S12/Andrieu08_AdaptiveMCMC_Tutorial.pdf\n",
        "\n",
        "  # NOTE: One important change we need to make from the hmc.py version is to\n",
        "  # combine the log_accept_ratio values from the different chains when\n",
        "  # deciding how to update the step size.  Here we use the mean\n",
        "  # log_accept_ratio to decide.\n",
        "  step_size_update = step_size.assign_add(\n",
        "      step_size * tf.where(\n",
        "          tf.exp(tf.minimum(tf.reduce_mean(\n",
        "              other_results.log_accept_ratio), 0.)) >\n",
        "              target_accept_rate,\n",
        "          x=0.1, y=-0.1))\n",
        "\n",
        "  # Note, the adaptations are performed during warmup only.\n",
        "  warmup = tf.group([x_update, step_size_update])\n",
        "\n",
        "  init = tf.global_variables_initializer()\n",
        "\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  # Initialize variables\n",
        "  sess.run(init)\n",
        "\n",
        "  # Warm up the sampler and adapt the step size\n",
        "  print 'Warmup'\n",
        "  start_time = time.time()\n",
        "  for i in range(num_warmup_iter):\n",
        "    sess.run(warmup)\n",
        "    if i % 500 == 0:\n",
        "      print 'Step %d' % i\n",
        "  end_time = time.time()\n",
        "  print 'Time per step:', (end_time - start_time) / num_warmup_iter\n",
        "  print 'Step size: %g' % sess.run(step_size)\n",
        "\n",
        "  # Collect samples without adapting step size\n",
        "  print 'Sampling'\n",
        "  start_time = time.time()\n",
        "  packed_samples = np.zeros([num_chain_iter, N_CHAINS, 3])\n",
        "  precision_samples = np.zeros([num_chain_iter, N_CHAINS, 2, 2])\n",
        "  results = []\n",
        "  for i in range(num_chain_iter):\n",
        "    _, x_, precision_, other_results_ = sess.run(\n",
        "        [x_update, x, precision, other_results])\n",
        "    packed_samples[i, :] = x_\n",
        "    precision_samples[i, :] = precision_\n",
        "    results.append(other_results_)\n",
        "    if i % 500 == 0:\n",
        "      print 'Step %d' % i\n",
        "  end_time = time.time()\n",
        "  print 'Time per step:', (end_time - start_time) / num_chain_iter"
      ],
      "execution_count": 40,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Warmup\n",
            "Step 0\n",
            "Step 500\n",
            "Step 1000\n",
            "Step 1500\n",
            "Step 2000\n",
            "Time per step: 0.00175355520248\n",
            "Step size: 0.0658879\n",
            "Sampling\n",
            "Step 0\n",
            "Step 500\n",
            "Step 1000\n",
            "Step 1500\n",
            "Step 2000\n",
            "Time per step: 0.00233575525284\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "AITl0hs2KmHZ",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "A quick check: our acceptance rate during our sampling is close to our target of 0.651."
      ]
    },
    {
      "metadata": {
        "id": "cFE1S3FX0alA",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        },
        "outputId": "4a5c539b-ef79-497a-c381-977703ce7b03"
      },
      "cell_type": "code",
      "source": [
        "is_accepted = np.array([r.is_accepted for r in results])\n",
        "print np.mean(is_accepted)"
      ],
      "execution_count": 41,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "0.7505333333333334\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "Lk4qcX4pz3pA",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "precision_samples_reshaped = np.reshape(precision_samples, [-1, 2, 2])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "yPWKLqVOKuRC",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "Even better, our sample mean and standard deviation are close to what we expect from the analytic solution."
      ]
    },
    {
      "metadata": {
        "id": "ktZJl5c01dmL",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 119
        },
        "outputId": "72d45460-91c6-4942-9274-5c8547955bd4"
      },
      "cell_type": "code",
      "source": [
        "print 'True posterior mean:\\n', posterior_mean\n",
        "print 'Mean of samples:\\n', np.mean(precision_samples_reshaped, axis=0)"
      ],
      "execution_count": 43,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "True posterior mean:\n",
            "[[ 0.9641778 -1.6534657]\n",
            " [-1.6534657  3.8683152]]\n",
            "Mean of samples:\n",
            "[[ 0.96679128 -1.65711279]\n",
            " [-1.65711279  3.87398375]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "cmPzXSn83yYa",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 119
        },
        "outputId": "f82a9d3c-2e76-4570-8986-047977359174"
      },
      "cell_type": "code",
      "source": [
        "print 'True posterior standard deviation:\\n', posterior_sd\n",
        "print 'Standard deviation of samples:\\n', np.std(precision_samples_reshaped, axis=0)"
      ],
      "execution_count": 44,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "True posterior standard deviation:\n",
            "[[0.1343549 0.2505081]\n",
            " [0.2505081 0.5390366]]\n",
            "Standard deviation of samples:\n",
            "[[0.13485005 0.25156848]\n",
            " [0.25156848 0.54219566]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "YYrX5WylYdIx",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "## Checking for convergence\n",
        "\n",
        "In general we won't have an analytic solution to check against, so we'll need to make sure the sampler has converged.  One standard check is the Gelman-Rubin $\\hat{R}$ statistic, which requires multiple sampling chains.  $\\hat{R}$ measures the degree to which variance (of the means) between chains exceeds what one would expect if the chains were identically distributed.  Values of $\\hat{R}$ close to 1 are used to indicate approximate convergence.  See [the source](https://github.com/tensorflow/probability/blob/master/tensorflow_probability/python/mcmc/diagnostic.py#L205) for details."
      ]
    },
    {
      "metadata": {
        "id": "rfQXeVn-77yD",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 51
        },
        "outputId": "cb54f4f5-f73b-4f98-9a11-f1aab927c7f1"
      },
      "cell_type": "code",
      "source": [
        "with tf.Graph().as_default() as g:\n",
        "  r_hat = tfp.mcmc.potential_scale_reduction(precision_samples)\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  print sess.run(r_hat)"
      ],
      "execution_count": 45,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "[[1.00091503 1.00266748]\n",
            " [1.00266748 1.00337495]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "sKCsWnBkpaTM",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "## Model criticism\n",
        "\n",
        "If we didn't have an analytic solution, this would be the time to do some real model criticism.\n",
        "\n",
        "Here are a few quick histograms of the sample components relative to our ground truth (in red).  Note that the samples have been shrunk from the sample precision matrix values toward the identity matrix prior."
      ]
    },
    {
      "metadata": {
        "id": "oOTvOJBmpqhS",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 581
        },
        "outputId": "a75cf981-d137-407b-c41c-d57a9551120a"
      },
      "cell_type": "code",
      "source": [
        "fig, axes = plt.subplots(2, 2, sharey=True)\n",
        "fig.set_size_inches(8, 8)\n",
        "for i in range(2):\n",
        "  for j in range(2):\n",
        "    ax = axes[i, j]\n",
        "    ax.hist(precision_samples_reshaped[:, i, j])\n",
        "    ax.axvline(true_precision[i, j], color='red',\n",
        "               label='True precision')\n",
        "    ax.axvline(sample_precision[i, j], color='red', linestyle=':',\n",
        "               label='Sample precision')\n",
        "    ax.set_title('precision[%d, %d]' % (i, j))\n",
        "plt.tight_layout()\n",
        "plt.legend()\n",
        "plt.show()"
      ],
      "execution_count": 46,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7f34fbe4da50>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "metadata": {
        "id": "5Oi6M2ZmvKVL",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "Some scatterplots of pairs of precision components show that because of the correlation structure of the posterior, the true posterior values are not as unlikely as they appear from the marginals above."
      ]
    },
    {
      "metadata": {
        "id": "5vT6MyKVslqV",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 869
        },
        "outputId": "cb79b048-ba53-4cd5-9812-a562596c8e61"
      },
      "cell_type": "code",
      "source": [
        "fig, axes = plt.subplots(4, 4)\n",
        "fig.set_size_inches(12, 12)\n",
        "for i1 in range(2):\n",
        "  for j1 in range(2):\n",
        "    index1 = 2 * i1 + j1\n",
        "    for i2 in range(2):\n",
        "      for j2 in range(2):\n",
        "        index2 = 2 * i2 + j2\n",
        "        ax = axes[index1, index2]\n",
        "        ax.scatter(precision_samples_reshaped[:, i1, j1],\n",
        "                   precision_samples_reshaped[:, i2, j2], alpha=0.1)\n",
        "        ax.axvline(true_precision[i1, j1], color='red')\n",
        "        ax.axhline(true_precision[i2, j2], color='red')\n",
        "        ax.axvline(sample_precision[i1, j1], color='red', linestyle=':')\n",
        "        ax.axhline(sample_precision[i2, j2], color='red', linestyle=':')\n",
        "        ax.set_title('(%d, %d) vs (%d, %d)' % (i1, j1, i2, j2))\n",
        "plt.tight_layout()\n",
        "plt.show()"
      ],
      "execution_count": 47,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n/o5PfepTW2qgY2vJf+THB23ClvNvj85z79EFdGnwe00nLpxuMruQMt/O8T0PKQXNmsehyeagzR0o\nyws4D4zXoNfxcGnBwmKNpejdAFoLgefTiHy0gigKqUXVsmGtpTBgjSHJFAYDFhbaObnWHByr08Eu\nva7pZkShhxRiz+0U7kVdOdbPunRV9cWh0FU633JdjTVChJRLM66criqcrnYPX//617nmmmtoNps0\nm03e+973Dtokxxpst67Otau01iy/szEMM6jWwzmdqiRJeO9738s111yz5jH33Xcff/M3f0MQBGse\n4xgOuu96z6BN2FLu+bdZHplpMbeY4/kSr1CUSgFw4XSTotBcdLBBHHjI/tTfIeAb3/gGb33rW3n/\n+9/PC17wgjMe/+IXv8gnPvEJpJS88pWv5BWveMWWvXa/gHP5zdepBUuAqG4As0JTaoM2VafEvKxu\nFJWu0v9s74axkyq0VgSBR5IrcqWxFha7GVJ6WGN5dKZNXlpGGyGeFNRjj4sOjOyZKPte09VuZZh1\nVQUpLGmuMMau0JUQoLXFmCqy63RV4XS1e3j00UfJsowbb7yRVqvFW97ylrPeNzoGx3brarVdJWMM\nyoDAYszGnaphmEG1Hs7pVIVhyG233cZtt9225jG33HILb3/727n11lu31DiH42wcm2lx39F5jBEU\n2hAiwBdkhWamlXJoso70JKEvh8qhevjhh/n4xz/Os571rFUfT5KED3/4w9x+++0EQcCP//iP86IX\nvYjx8fFts2n5ghV5ktmiRPcWvjjw8KSgUJrZVro0mC/wBAKLNlXreq0NWVFiDRRKAR6NmkcnUSwk\nOaHnoY0hCgOywnBsts2Fe+gG0DFYhl1XoSdY6ORobRBipa5mFlNC38eTVd2B05VjN7KwsMCtt97K\nsWPHeO1rX8tf/MVfrHmzOzFRx/e9DZ1/enpkK8zccobVLhiMbdZa/Cij/6s/frJDN9dLTXeOz3W5\n6Fx29ballts/DbSSgjxXWCwCQRT5jG7hWrfZz+ucTpXv+/hnqUH5whe+wFVXXcVFF120KUMcO0Pt\nIx8CIL3pLQO2ZHO0uzlz7YJSWcJQEngepTGgJPiSstAUpak6bA2RQwUwPT3Nrbfeyi/90i+t+vjf\n//3f8/SnP52RkUrcz3rWs/j2t7/NC1/4wm21q18bYuMArEQZReRLwtBDK0stqqLjUlbb7aU2FLlC\n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\nBz/4ASMjI3z0ox+tP/aFL3yBAw88sIVWTaebnNilsBp01SrEqVplBOe/pdUmCELXIboShOVHdNU5\nXHjhhVx44YWtNmNeusWJXQqiq+bR1jVVgiAIgiAIgiAI7Y44VauMnkvfR8+l72u1GYLQVYiuBGH5\nEV0JwvIjumoekv63ynAf/G2rTRCErkN0JQjLj+hKEJYf0VXzUGZmj0lBEARBEARBEAShYST9TxAE\nQRAEQRAEYQmIUyUIgiAIgiAIgrAExKkSBEEQBEEQBEFYAuJUCYIgCIIgCIIgLAFxqgRBEARBEARB\nEJaAOFWCIAiCIAiCIAhLoOVzqj7/+c/z+9//HqUUn/rUpzj++OPrz5155pls2LAB27YB+NKXvsT6\n9ev3+5pm27Vz506uvvrq+nHPPfccV111FWEY8pWvfIWNGzcC8LrXvY7//t//+7LbBfDYY49x+eWX\n8773vY+LL7542nO/+tWv+PKXv4xt25x66qlcccUV+/19Vsqubdu28eUvfxnLsjjssMP43Oc+x29+\n8xs+8pGPcNRRRwGwadMmPvOZzyy7XfPZ1sr7rFm0q672Z1urtdWuuprPtlZqa7XpCtpXW+2qK2hf\nbYmu2gfR1cIRXS2fXct2j5kW8q//+q/m0ksvNcYY88QTT5h3vvOd054/44wzTKFQWNBrVsKuGmEY\nmi1btphCoWDuuusuc/311y+7LTMpFovm4osvNp/+9KfN7bffvs/zb3zjG82LL75o4jg2F110kXn8\n8cdX5D2bz66zzz7bbN++3RhjzJVXXml+9rOfmW3btpkrr7xy2W1ZqG2tus+aRbvqaiHXWWlttauu\nGrGtVdpabboypn211a66MqZ9tSW6ah9EVwtHdLW8di3XPdbS9L8HHniAs846C4AjjjiCsbExCoXC\nsr+mWXZ973vfY/PmzeRyuWW9/v7wPI9bbrmFdevW7fPcc889R19fHwcccACWZXHaaafxwAMPrMh7\ntj+7AO6++242bNgAwODgICMjI8t6/aXYNhsr8Z41i3bV1UKus9LaalddzWcbtE5bq01X0L7aaldd\nQftqS3TVPoiuFo7oanntmo3FvF8tdar27NnDwMBA/efBwUF279497Zhrr72Wiy66iC996UsYYxp6\nzUrYBbB161be8Y531H/+9a9/zQc/+EHe+9738h//8R/LalMNx3FIp9OzPrd7924GBwfrP9fsXon3\nbH92AeTzeQB27drFL3/5S0477TQAnnjiCS677DIuuugifvnLXy6rTY3aBq25z5pFu+qqUdtg5bXV\nrrqazzZonbZWm66gfbXVrrqC9tWW6Kp9EF0tHNHV8toFy3OPtbymairGmGk/f/jDH+YNb3gDClsL\n5wAAIABJREFUfX19XHHFFdx7773zvmYl7AL43e9+x+GHH16/QV7+8pczODjI6aefzu9+9zs+/vGP\n80//9E9Nt20xrMR7Nht79+7lsssu49prr2VgYIBDDz2UD33oQ7zxjW/kueee4z3veQ8//OEP8Txv\nRe1ql/usWbSrrua6Tqdqq5X3SDtqq53us2bRrtrqJl2BfGdNpV3usWYiuloZRFeTLNc91lKnat26\ndezZs6f+865duxgaGqr//Na3vrX+71NPPZXHHnts3teshF0AP/vZzzj55JPrPx9xxBEcccQRAJxw\nwgkMDw8Tx3G96G0lmGn3zp07WbduHa7rNv09m49CocAll1zCRz/6UV7/+tcDsH79et70pjcBsHHj\nRtauXcvOnTs55JBDVtS2Vt1nzaJdddWIbdB+2mpnXUH7aqvbdAXtq61O1BW0t7ZEVyuH6Gp5EV0t\nnOW6x1qa/nfKKafUvcFHH32UdevW1b39iYkJPvjBDxIEAQC/+c1vOOqoo/b7mpWwq8bDDz/M0Ucf\nXf/5lltu4Z//+Z+BpMPI4ODgiooI4OCDD6ZQKPD8888TRRE//elPOeWUU1bkPZuP66+/nve+972c\neuqp9cfuuecebr31ViAJV+/du5f169evqF2tvM+aRbvqaj7barSbttpZV9Ce2mr1fdYs2lVbnagr\naG9tia5WDtHV8iK6WhjLeY+1NFJ14okncuyxx7JlyxaUUlx77bXcfffd9PT0cPbZZ3Pqqady4YUX\nkkql+KM/+iPOPfdclFL7vGal7YLkD79mzZr6a9785jdzzTXXcMcddxBFEZ/73OeW3S6ARx55hC98\n4Qu88MILOI7Dvffey5lnnsnBBx/M2WefzXXXXcdVV10FwJve9CYOO+wwDjvssKa/Z/uz6/Wvfz3f\n//73eeaZZ7jzzjsBOP/88znvvPO4+uqr+clPfkIYhlx33XVNCffO95616j5rFu2qq0Zsg9Zoq111\nNZ9trdTWatMVtK+22lVX0L7aEl21D6KrhSO6Wj67lvMeU6bTk28FQRAEQRAEQRBaSEvT/wRBEARB\n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\nQgixAtJUCSGEEEIIIcQKSFMlhBBCCCGEECsgTZUQQgghhBBCrEBfNFVJkvC+972P17zmNfzmb/4m\n3//+kRukbdmyhde//vVz/6Rp2nU13nHHHVx++eVcccUVbN++fVXrm+/ee+/l/PPP56677jrq9zv9\nWs5arM5ueT17VS/kqtk6u+G9ILkSILlqh17IluSqvSRXrSe5WgbTB26//XZz3XXXGWOMeeihh8zl\nl19+xDEveMELVrmqhRarsVqtmosvvthMT0+ber1uLrnkEjMxMbHqdT7xxBPmbW97m7n66qvNnXfe\nedRjOv1aGrN4nd3yevayXsiVMb2RLcmVmCW5aq1eyJbkqv0kV60luVqevhipuuyyy/jABz4AwMjI\nCJOTkx2u6EiL1fjAAw/w3Oc+l1KpRBAEnHPOOdx///2rXufY2Bg33HADpVJp1Z97KRars1tez17W\nC7mC3siW5ErMkly1Vi9kS3LVfpKr1pJcLU9fNFWu6+L7PgC33norl1566RHHRFHEtddey7Zt2/jr\nv/7r1S5x0RoPHDjAyMjI3N9HRkbYv3//qtYIkMvlsG37uMd0+rWExevsltezl/VCrqA3siW5ErMk\nV63VC9mSXLWf5Kq1JFfL47T10dtg+/btR9wX+Y53vIMXvehFfOlLX2LHjh3cdNNNR/zce9/7Xi67\n7DKUUrzuda/j3HPP5bnPfW5X1TifMaYttc13vDqPZzVfy5XUOd9qvJ69rBdytZI652v3e0FyJWZJ\nrlqrF7IluWo/yVVrSa5ap+eaqiuuuIIrrrjiiK9v376dO++8kxtvvBHXdY/4/mte85q5P5933nk8\n9NBDbfufv5wa169fz4EDB+b+vm/fPn7hF36hLfUtVudiVvO1hOXV2YnXs5f1Qq6WW+dqvxckV2KW\n5Gp16lxMN/z+Px7J1dJIrlanzsVIro7UF7f/7dy5k9tuu40bbrhhblh1vkcffZRrr70WYwxJknD/\n/fdz2mmndVWNz3ve8/jRj37E9PQ01WqV+++/n3PPPXdVa2xGN7yWzeiV17Ob9UKumqmzF94L3fJa\nLqYXXstuJ7laXd3yeh5Pr7yW3Uxytbq65fU8nk68lj03UnU027dvZ3Jykquuumrua5/73Oe45ZZb\neP7zn8/ZZ5/Nxo0befWrX41lWVx44YWcddZZXVfjtddey1ve8haUUrz97W/vyATB73znO3zuc5/j\n0UcfZceOHXzhC1/g85//PJ/5zGe65rVsts5ueD17WS/kqtk6O/1ekFyJWZKr1uqFbEmu2k9y1VqS\nq+VRRm7eFUIIIYQQQohl64vb/4QQQgghhBCiU6SpEkIIIYQQQogVkKZKCCGEEEIIIVZAmiohhBBC\nCCGEWAFpqoQQQgghhBBiBaSpEkIIIYQQQogVkKZKCCGEEEIIIVZAmiohhBBCCCGEWAFpqoQQQggh\nhBBiBaSpEkIIIYQQQogVkKZKCCGEEEIIIVZAmiohhBBCCCGEWAFpqoQQQgghhBBiBaSpEkIIIYQQ\nQogVkKZqhf72b/+W973vfQDEccxHP/pRnvWsZ7Fnz56mfn56eprf+73fY+vWrVx66aV885vfBOC2\n227jPe95T9vqhoW1f+973+NVr3oVW7du5U1velNT9XeydtHf1nKuAL773e9y/vnnc+ONN859TXIl\nVqpfctVrtYv+1svvzZXWDvL7agEjlm3nzp3mxS9+sSmXy8YYY37nd37H/OVf/qU5/fTTze7du5t6\njA9/+MPmz/7sz4wxxuzevducd955Zs+ePcYYY37rt37L/Mu//Evba69Wq+a8884zDz74oDHGmFtv\nvdVcddVVXVu76G9rPVd33HGHufLKK82b3/xm8+lPf3rB9yRXYrn6JVe9Vrvob7383mxF7fL7aiEZ\nqVqBm2++md/4jd+gWCwCcPXVV/POd75zSY/xrW99i23btgGwceNGXvCCF/Cv//qvALz1rW9d0PnP\n+tnPfsYLXvACkiSZ+9rVV1/Nl7/8ZR566CGuvPJKLrnkEi6++GK++MUvLlr7Pffcw+bNm9myZQsA\nl19+Of/xH/9BpVJpee1CLGat5+rUU0/lb/7mbxgbGzvie5IrsVz9kqvVrF2Ixaz1XMnvq4WkqVqB\nf/7nf+ZlL3vZ3N/PPvvsJf38xMQEk5OTnHTSSXNfO+mkk3j00UcBuOCCC3jsscd48sknF/zcM5/5\nTEZHR/n+978PQL1e55577mHr1q3ccMMNbNu2jW984xvcdttt/Od//idRFB239scff5zNmzfPfa9Q\nKDA0NHTE87aidiEWs5ZzBbBlyxY8zzvq9yRXYrn6JVerWbsQi1nLuQL5fXU4aaqW6ec//znlcpln\nPetZy36MRqOBZVm4rjv3Nd/3qdfrADiOw5lnnskPfvCDI35269at3HnnnQDcfffdnHXWWYyMjLBu\n3Tq+9a1vsWPHDoaHh7nxxhuPeMMfXnu9Xsf3/QXH+L5PrVZrS+1CHMtaz9ViJFdiOfopV6tduxDH\n0un3ZqdztZi1mCtpqpZpfHycoaEhLGv5L2Eul0NrveAKQhG695QAACAASURBVKPRIJ/Pz/19ZGSE\n8fHxI352fpi+/e1v84pXvAKAd7/73Zx++um8613v4sUvfjFf+tKXFq09n88ThuGCYxqNBoVCoS21\nC3Esaz1XzZBciaXqp1ytdu1CHEun35udzlUz1lqupKlaJmPMih9jaGiIkZERdu7cOfe1J554gmc+\n85mL/uwZZ5yBbdv85Cc/4bvf/e7cEG6hUOCaa67hX/7lX7jhhhv41Kc+xWOPPXbc2k899dQFw7Pl\ncpmpqSlOPvnkttQuxLGs9VwJ0Q79lKvVrl2IY+n0e7PTuRJHkqZqmUZGRpicnERrvaLH+bVf+zVu\nvfVWIJt4eO+99/Krv/qrc98fHx9neHj4qD+7detWrr/+ep797GfPHfO2t72Nhx9+GIDTTz+dYrGI\nUuq4tb/whS9k165dc/fm3nLLLbz0pS9dcKWk1bULcTSSq8VJrsRS9VOuOlG7EEfTDe/NTudqMWsu\nV51beLC3aa3NeeedZ3784x8bY4zZv3+/2bp1q9m6das5/fTTzUUXXWS2bt1q9uzZY/bs2WMuueSS\noz5OuVw2b3/7281FF11kLrnkkgXLTyZJYs4++2zz+OOPH/VnH3zwQXP66aebr371q3Nfu/vuu80r\nX/lK8/KXv9y8/OUvNzfffPOitRtjzD333GNe+cpXmosuusi8+c1vNvv27TPGmLbVLsTRSK6Mef/7\n32+2bt1qzjnnHPPCF77QbN261XzhC19oqnYhjqafctWJ2oU4mm54b3Y6V/L7aiFpqlbgwx/+sLn+\n+uubOvYP/uAPlvz4d999t7nsssuW/HPN6OXaRX/r5fdmL9cu+lsvvzd7uXbR33r5vdnLtXcruf1v\nBd761rfyta99jWq1etzjoihasGxlsz772c9y9dVXL7e84+rl2kV/6+X3Zi/XLvpbL783e7l20d96\n+b3Zy7V3K/uP//iP/7jTRfSqwcFBXNfl9ttv56KLLjrmcbZtc9pppy3psb/61a8yMTHRtjdkL9cu\n+lsvvzd7uXbR33r5vdnLtYv+1svvzV6uvVspY2QJECGEEEIIIYRYLrn9TwghhBBCCCFWwFntJ9y/\n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\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7f34fb463450>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "metadata": {
        "id": "DcmvbpxoMYtl",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "# Version 4: simpler sampling of constrained parameters\n",
        "\n",
        "Bijectors made sampling the precision matrix straightforward, but there was a fair amount of manual converting to and from the unconstrained representation.  There is an easier way!"
      ]
    },
    {
      "metadata": {
        "id": "Mv2bgnmVvfxk",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### The TransformedTransitionKernel\n",
        "\n",
        "The `TransformedTransitionKernel` simplifies this process.  It wraps your sampler and handles all the conversions.  It takes as an argument a list of bijectors that map unconstrained parameter values to constrained ones.  So here we need the inverse of the `precision_to_unconstrained` bijector we used above.  We could just use `tfb.Invert(precision_to_unconstrained)`, but that would involve taking of inverses of inverses (TensorFlow isn't smart enough to simplify `tf.Invert(tf.Invert())` to `tf.Identity())`, so instead we'll just write a new bijector."
      ]
    },
    {
      "metadata": {
        "id": "paGZdKlRvj7E",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Constraining bijector"
      ]
    },
    {
      "metadata": {
        "id": "Vv4JqbHUP9n7",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# The bijector we need for the TransformedTransitionKernel is the inverse of\n",
        "# the one we used above\n",
        "unconstrained_to_precision = tfb.Chain([\n",
        "    # step 3: take the product of Cholesky factors\n",
        "    tfb.CholeskyOuterProduct(validate_args=VALIDATE_ARGS),\n",
        "    # step 2: exponentiate the diagonals    \n",
        "    tfb.TransformDiagonal(tfb.Exp(validate_args=VALIDATE_ARGS)),\n",
        "    # step 3: map a vector to a lower triangular matrix\n",
        "    tfb.FillTriangular(validate_args=VALIDATE_ARGS),\n",
        "])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "VWgW2Qk0eM8L",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 153
        },
        "outputId": "00f709b9-2814-4870-aaab-d3ac2c7291f1"
      },
      "cell_type": "code",
      "source": [
        "# quick sanity check\n",
        "with tf.Graph().as_default() as g:\n",
        "  m = tf.constant([[1., 2.], [2., 8.]])\n",
        "  m_inv = unconstrained_to_precision.inverse(m)\n",
        "  m_fwd = unconstrained_to_precision.forward(m_inv)\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  m_, m_inv_, m_fwd_ = sess.run([m, m_inv, m_fwd])\n",
        "  print 'm:\\n', m_\n",
        "  print 'unconstrained_to_precision.inverse(m):\\n', m_inv_\n",
        "  print 'forward(unconstrained_to_precision.inverse(m)):\\n', m_fwd_"
      ],
      "execution_count": 49,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "m:\n",
            "[[1. 2.]\n",
            " [2. 8.]]\n",
            "unconstrained_to_precision.inverse(m):\n",
            "[0.6931472 2.        0.       ]\n",
            "forward(unconstrained_to_precision.inverse(m)):\n",
            "[[1. 2.]\n",
            " [2. 8.]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "wnVsQFysvoM2",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "## Sampling with the TransformedTransitionKernel\n",
        "\n",
        "With the `TransformedTransitionKernel`, we no longer have to do manual transformations of our parameters.  Our initial values and our samples are all precision matrices; we just have to pass in our unconstraining bijector(s) to the kernel and it takes care of all the transformations."
      ]
    },
    {
      "metadata": {
        "id": "a2VVVg4KhSnb",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 272
        },
        "outputId": "a498d3b1-208c-4170-e5e9-2007e959e290"
      },
      "cell_type": "code",
      "source": [
        "# Code adapted from tensorflow_probability/python/mcmc/hmc.py\n",
        "with tf.Graph().as_default() as g:\n",
        "  tf.set_random_seed(123)\n",
        "  log_lik_fn = get_log_lik(my_data)\n",
        "\n",
        "  # Tuning acceptance rates:\n",
        "  dtype = np.float32\n",
        "  num_warmup_iter = 2500\n",
        "  num_chain_iter = 2500\n",
        "\n",
        "  # Set the target average acceptance ratio for the HMC as suggested by\n",
        "  # Beskos et al. (2013):\n",
        "  # https://projecteuclid.org/download/pdfview_1/euclid.bj/1383661192\n",
        "  target_accept_rate = 0.651\n",
        "\n",
        "  x = tf.get_variable(name='x', initializer=initial_values)\n",
        "  step_size = tf.get_variable(name='step_size', initializer=tf.constant(0.01, dtype=dtype))\n",
        "\n",
        "  # Initialize the HMC sampler, now wrapped in the TransformedTransitionKernel\n",
        "  ttk = tfp.mcmc.TransformedTransitionKernel(\n",
        "      inner_kernel=tfp.mcmc.HamiltonianMonteCarlo(\n",
        "      target_log_prob_fn=log_lik_fn,\n",
        "      step_size=step_size,\n",
        "      num_leapfrog_steps=3),\n",
        "      bijector=[unconstrained_to_precision])\n",
        "\n",
        "  # One iteration\n",
        "  next_x, other_results = ttk.one_step(\n",
        "      current_state=x,\n",
        "      previous_kernel_results=ttk.bootstrap_results(x))\n",
        "\n",
        "  x_update = x.assign(next_x)\n",
        "\n",
        "  # Adapt the step size using standard adaptive MCMC procedure. See Section 4.2\n",
        "  # of Andrieu and Thoms (2008):\n",
        "  # http://www4.ncsu.edu/~rsmith/MA797V_S12/Andrieu08_AdaptiveMCMC_Tutorial.pdf\n",
        "\n",
        "  # NOTE: one change from above is that we have to look at \n",
        "  # other_results.inner_results.log_accept_ratio, since the new kernel\n",
        "  # wraps the results from the HMC kernel.\n",
        "  step_size_update = step_size.assign_add(\n",
        "      step_size * tf.where(\n",
        "          tf.exp(tf.minimum(tf.reduce_mean(\n",
        "              other_results.inner_results.log_accept_ratio), 0.)) >\n",
        "              target_accept_rate,\n",
        "          x=0.1, y=-0.1))\n",
        "\n",
        "  # Note, the adaptations are performed during warmup only.\n",
        "  warmup = tf.group([x_update, step_size_update])\n",
        "\n",
        "  init = tf.global_variables_initializer()\n",
        "  \n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  # Initialize\n",
        "  sess.run(init)\n",
        "\n",
        "  # Warm up the sampler and adapt the step size\n",
        "  print 'Warmup'\n",
        "  start_time = time.time()\n",
        "  for i in range(num_warmup_iter):\n",
        "    sess.run(warmup)\n",
        "    if i % 500 == 0:\n",
        "      print 'Step %d' % i\n",
        "  end_time = time.time()\n",
        "  print 'Time per step:', (end_time - start_time) / num_warmup_iter\n",
        "  print 'Step size: %g' % sess.run(step_size)\n",
        "\n",
        "  # Collect samples without adapting step size\n",
        "  print 'Sampling'\n",
        "  start_time = time.time()\n",
        "  precision_samples = np.zeros([num_chain_iter, N_CHAINS, 2, 2])\n",
        "  results = []\n",
        "  for i in range(num_chain_iter):\n",
        "    _, x_, other_results_ = sess.run([x_update, x, other_results])\n",
        "    precision_samples[i, :] = x_\n",
        "    results.append(other_results_)\n",
        "    if i % 500 == 0:\n",
        "      print 'Step %d' % i\n",
        "  end_time = time.time()\n",
        "  print 'Time per step:', (end_time - start_time) / num_chain_iter"
      ],
      "execution_count": 50,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Warmup\n",
            "Step 0\n",
            "Step 500\n",
            "Step 1000\n",
            "Step 1500\n",
            "Step 2000\n",
            "Time per step: 0.00185751085281\n",
            "Step size: 0.0805296\n",
            "Sampling\n",
            "Step 0\n",
            "Step 500\n",
            "Step 1000\n",
            "Step 1500\n",
            "Step 2000\n",
            "Time per step: 0.00228085231781\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "sufld3q7kPV1",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Checking convergence\n",
        "\n",
        "The $\\hat{R}$ convergence check looks good!"
      ]
    },
    {
      "metadata": {
        "id": "a3Ou0K51jRfz",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 51
        },
        "outputId": "c21d4924-a545-4f04-e6d6-a79c71e16783"
      },
      "cell_type": "code",
      "source": [
        "with tf.Graph().as_default() as g:\n",
        "  r_hat = tfp.mcmc.potential_scale_reduction(precision_samples)\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  print sess.run(r_hat)"
      ],
      "execution_count": 51,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "[[1.01071885 1.00678058]\n",
            " [1.00678058 1.00316437]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "z7Vy6BuelDPZ",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Comparison against the analytic posterior\n",
        "\n",
        "Again let's check against the analytic posterior."
      ]
    },
    {
      "metadata": {
        "id": "jXxuO15HkeTD",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# The output samples have shape [n_steps, n_chains, 2, 2]\n",
        "# Flatten them to [n_steps * n_chains, 2, 2] via reshape:\n",
        "precision_samples_reshaped = np.reshape(precision_samples, [-1, 2, 2])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "twDknslqk1uG",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 119
        },
        "outputId": "51a01dc2-9e22-4d82-c0e5-84a976ee3a57"
      },
      "cell_type": "code",
      "source": [
        "print 'True posterior mean:\\n', posterior_mean\n",
        "print 'Mean of samples:\\n', np.mean(precision_samples_reshaped, axis=0)"
      ],
      "execution_count": 53,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "True posterior mean:\n",
            "[[ 0.9641778 -1.6534657]\n",
            " [-1.6534657  3.8683152]]\n",
            "Mean of samples:\n",
            "[[ 0.96705206 -1.66034877]\n",
            " [-1.66034877  3.88495156]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "22448rkUk_Wa",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 119
        },
        "outputId": "741cfb0c-2f61-4c10-b82f-01ced9cfb56b"
      },
      "cell_type": "code",
      "source": [
        "print 'True posterior standard deviation:\\n', posterior_sd\n",
        "print 'Standard deviation of samples:\\n', np.std(precision_samples_reshaped, axis=0)"
      ],
      "execution_count": 54,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "True posterior standard deviation:\n",
            "[[0.1343549 0.2505081]\n",
            " [0.2505081 0.5390366]]\n",
            "Standard deviation of samples:\n",
            "[[0.13384099 0.25213871]\n",
            " [0.25213871 0.53954768]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "-TwR4z4glG0J",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "# Optimizations\n",
        "\n",
        "Now that we've got things running end-to-end, let's do a more optimized version.  Speed doesn't matter too much for this example, but once matrices get larger, a few optimizations will make a big difference."
      ]
    },
    {
      "metadata": {
        "id": "zbZv_23gT3oG",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "One big speed improvement we can make is to reparameterize in terms of the Cholesky decomposition.  The reason is our data likelihood function requires both the covariance and the precision matrices.  Matrix inversion is expensive ($O(n^3)$ for an $n \\times n$ matrix), and if we parameterize in terms of either the covariance or the precision matrix, we need to do an inversion to get the other.\n",
        "\n",
        "As a reminder, a real, positive-definite, symmetric matrix $M$ can be decomposed into a product of the form $M = L L^T$ where the matrix $L$ is lower triangular and has positive diagonals.  Given the Cholesky decomposition of $M$, we can more efficiently obtain both $M$ (the product of a lower and an upper triangular matrix) and $M^{-1}$ (via back-substitution).  The Cholesky factorization itself is not cheap to compute, but if we parameterize in terms of Cholesky factors, we only need to compute the Choleksy factorization of the initial parameter values.\n"
      ]
    },
    {
      "metadata": {
        "id": "mgYTtadL7sMf",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "## Using the Cholesky decomposition of the covariance matrix\n",
        "\n",
        "TFP has a version of the multivariate normal distribution, [MultivariateNormalTriL](https://www.tensorflow.org/probability/api_docs/python/tfp/distributions/MultivariateNormalTriL), that is parameterized in terms of the Cholesky factor of the covariance matrix.  So if we were to parameterize in terms of the Cholesky factor of the covariance matrix, we could compute the data log likelihood efficiently.  The challenge is in computing the prior log likelihood with similar efficiency.\n",
        "\n",
        "If we had a version of the inverse Wishart distribution that worked with Cholesky factors of samples, we'd be all set.  Alas, we don't.  (The team would welcome code submissions, though!)  As an alternative, we can use a version of the Wishart distribution that works with Cholesky factors of samples together with a chain of bijectors.\n",
        "\n",
        "At the moment, we're missing a few stock bijectors to make things really efficient, but I want to show the process as an exercise and a useful illustration of the power of TFP's bijectors."
      ]
    },
    {
      "metadata": {
        "id": "G0OWSj5HCEA6",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### A Wishart distribution that operates on Cholesky factors\n",
        "\n",
        "The `Wishart` distribution has a useful flag, `input_output_cholesky`, that specifies that the input and output matrices should be Cholesky factors.  It's more efficient and numerically advantageous to work with the Cholesky factors than full matrices, which is why this is desirable.  An important point about the semantics of the flag: it's only an indication that the representation of the input and output to the distribution should change - it does *not* indicate a full reparameterization of the distribution, which would involve a Jacobian correction to the `log_prob()` function.  We actually want to do this full reparameterization, so we'll build our own distribution."
      ]
    },
    {
      "metadata": {
        "id": "QgUyMB4OEyFZ",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# An optimized Wishart distribution that has been transformed to operate on\n",
        "# Cholesky factors instead of full matrices.  Note that we gain a modest\n",
        "# additional speedup by specifying the Cholesky factor of the scale matrix\n",
        "# (i.e. by passing in the scale_tril parameter instead of scale).\n",
        "\n",
        "class CholeskyWishart(tfd.TransformedDistribution):\n",
        "  \"\"\"Wishart distribution reparameterized to use Cholesky factors.\"\"\"\n",
        "  def __init__(self,\n",
        "      df,\n",
        "      scale_tril,\n",
        "      validate_args=False,\n",
        "      allow_nan_stats=True,\n",
        "      name='CholeskyWishart'):\n",
        "    # Wishart has a bunch of methods that we want to support but not\n",
        "    # implement.  We'll subclass TransformedDistribution here to take care of\n",
        "    # those.  We'll override the few for which speed is critical and implement\n",
        "    # them with a separate Wishart for which input_output_cholesky=True\n",
        "    super(CholeskyWishart, self).__init__(\n",
        "        distribution=tfd.Wishart(\n",
        "            df=df,\n",
        "            scale_tril=scale_tril,\n",
        "            input_output_cholesky=False,\n",
        "            validate_args=validate_args,\n",
        "            allow_nan_stats=allow_nan_stats),\n",
        "        bijector=tfb.Invert(tfb.CholeskyOuterProduct()),\n",
        "        validate_args=validate_args,\n",
        "        name=name\n",
        "    )\n",
        "    # Here's the Cholesky distribution we'll use for log_prob() and sample()\n",
        "    self.cholesky = tfd.Wishart(\n",
        "        df=df,\n",
        "        scale_tril=scale_tril,\n",
        "        input_output_cholesky=True,\n",
        "        validate_args=validate_args,\n",
        "        allow_nan_stats=allow_nan_stats)\n",
        "    \n",
        "  def _log_prob(self, x):\n",
        "    return (self.cholesky.log_prob(x) +\n",
        "            self.bijector.inverse_log_det_jacobian(x, event_ndims=2))\n",
        "\n",
        "  def _sample_n(self, n, seed=None):\n",
        "    return self.cholesky._sample_n(n, seed)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "yVBT4gXwNZbS",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 85
        },
        "outputId": "99ff16a8-cd1f-420d-ad98-1db50c52e135"
      },
      "cell_type": "code",
      "source": [
        "# some checks\n",
        "PRIOR_SCALE_CHOLESKY = np.linalg.cholesky(PRIOR_SCALE)\n",
        "\n",
        "with tf.Graph().as_default() as g:\n",
        "  w_transformed = tfd.TransformedDistribution(\n",
        "      tfd.Wishart(df=PRIOR_DF, scale_tril=PRIOR_SCALE_CHOLESKY),\n",
        "      bijector=tfb.Invert(tfb.CholeskyOuterProduct()))\n",
        "  w_optimized = CholeskyWishart(\n",
        "      df=PRIOR_DF, scale_tril=PRIOR_SCALE_CHOLESKY)\n",
        "\n",
        "  m = tf.placeholder(dtype=tf.float32)\n",
        "  log_prob_transformed = w_transformed.log_prob(m)\n",
        "  log_prob_optimized = w_optimized.log_prob(m)\n",
        "  \n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  for matrix in [np.eye(2, dtype=np.float32),\n",
        "                 np.array([[1., 0.], [2., 8.]], dtype=np.float32)]:\n",
        "    log_prob_transformed_, log_prob_optimized_ = sess.run(\n",
        "        [log_prob_transformed, log_prob_optimized],\n",
        "        feed_dict={m: matrix})\n",
        "    print 'Transformed Wishart:', log_prob_transformed_\n",
        "    print 'Optimized Wishart', log_prob_optimized_\n"
      ],
      "execution_count": 56,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Transformed Wishart: -0.84889317\n",
            "Optimized Wishart -0.84889317\n",
            "Transformed Wishart: -99.269455\n",
            "Optimized Wishart -99.269455\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "tpKd8zkW75sm",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Building an inverse Wishart distribution\n",
        "\n",
        "We have our covariance matrix $C$ decomposed into $C = L L^T$ where $L$ is lower triangular and has a positive diagonal.  We want to know the probability of $L$ given that $C \\sim W^{-1}(\\nu, V)$ where $W^{-1}$ is the inverse Wishart distribution.\n",
        "\n",
        "The inverse Wishart distribution has the property that if $C \\sim W^{-1}(\\nu, V)$, then the precision matrix $C^{-1} \\sim W(\\nu, V^{-1})$.  So we can get the probability of $L$ via a `TransformedDistribution` that takes as parameters the Wishart distribution and a bijector that maps the Cholesky factor of precision matrix to a Cholesky factor of its inverse.\n",
        "\n",
        "A straightforward (but not super efficient) way to get from the Cholesky factor of $C^{-1}$ to $L$ is to invert the Cholesky factor by back-solving, then forming the covariance matrix from these inverted factors, and then doing a Cholesky factorization.\n",
        "\n",
        "Let the Cholesky decomposition of $C^{-1} = M M^T$.  $M$ is lower triangular, so we can invert it using the `MatrixInverseTriL` bijector.\n",
        "\n",
        "Forming $C$ from $M^{-1}$ is a little tricky: $C = (M M^T)^{-1} = M^{-T}M^{-1} = M^{-T} (M^{-T})^T$.  $M$ is lower triangular, so $M^{-1}$ will also be lower triangular, and $M^{-T}$ will be upper triangular.  The `CholeskyOuterProduct()` bijector only works with lower triangular matrices, so we can't use it to form $C$ from $M^{-T}$.  Our workaround is a chain of bijectors that permute the rows and columns of a matrix.\n",
        "\n"
      ]
    },
    {
      "metadata": {
        "id": "CgUuL8kwVFDK",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# Here's our permuting bijector:\n",
        "def get_permuter():\n",
        "  permutation = [1, 0]\n",
        "  return tfb.Chain([\n",
        "      tfb.Transpose(rightmost_transposed_ndims=2),\n",
        "      tfb.Permute(permutation=permutation),\n",
        "      tfb.Transpose(rightmost_transposed_ndims=2),\n",
        "      tfb.Permute(permutation=permutation),   \n",
        "  ])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "1yjo-oudqAAf",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 170
        },
        "outputId": "1b53d24a-8e4c-4f36-c167-20460798ad80"
      },
      "cell_type": "code",
      "source": [
        "# Some sanity checks\n",
        "with tf.Graph().as_default() as g:\n",
        "  m = np.array([[1., 0.], [2., 8.]], dtype=np.float32)\n",
        "  permuter = get_permuter()\n",
        "  p_fwd = permuter.forward(m)\n",
        "  p_fwd_fwd = permuter.forward(p_fwd)\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  print 'm =\\n', m\n",
        "  print 'permuted = \\n', sess.run(p_fwd)\n",
        "  print 'permuted^2 = \\n', sess.run(p_fwd_fwd)"
      ],
      "execution_count": 58,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "m =\n",
            "[[1. 0.]\n",
            " [2. 8.]]\n",
            "permuted = \n",
            "[[8. 2.]\n",
            " [0. 1.]]\n",
            "permuted^2 = \n",
            "[[1. 0.]\n",
            " [2. 8.]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "furWzJRYvFYC",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Combining all the pieces"
      ]
    },
    {
      "metadata": {
        "id": "r6-vpGOBTqhr",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "Our final bijector is now a big chain:"
      ]
    },
    {
      "metadata": {
        "id": "fPPO17cgq7SK",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "def get_wishart_cholesky_to_iw_cholesky():\n",
        "  return tfb.Chain([\n",
        "      # step 6: get the Cholesky factor for the covariance matrix\n",
        "      tfb.Invert(tfb.CholeskyOuterProduct()),\n",
        "      # step 5: undo our permutation (note that permuter.inverse = permuter.forward)\n",
        "      get_permuter(),\n",
        "      # step 4: form the covariance matrix from the inverted Cholesky factors\n",
        "      tfb.CholeskyOuterProduct(),\n",
        "      # step 3: make things lower triangular\n",
        "      get_permuter(),\n",
        "      # step 2: transpose the inverse\n",
        "      tfb.Transpose(rightmost_transposed_ndims=2),\n",
        "      # step 1: invert the Cholesky factor (see code below)\n",
        "      tfb.MatrixInverseTriL()\n",
        "  ])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "QDCeOcQOrIUI",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 119
        },
        "outputId": "2758975a-d3ea-46dc-dd48-c6bccaa415c2"
      },
      "cell_type": "code",
      "source": [
        "# verify that the bijector works\n",
        "with tf.Graph().as_default() as g:\n",
        "  m = np.array([[1., 0.], [2., 8.]], dtype=np.float32)\n",
        "  c_inv = m.dot(m.T)\n",
        "  c = np.linalg.inv(c_inv)\n",
        "  c_chol = np.linalg.cholesky(c)\n",
        "  wishart_cholesky_to_iw_cholesky = get_wishart_cholesky_to_iw_cholesky()\n",
        "  w_fwd = wishart_cholesky_to_iw_cholesky.forward(m)\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  print 'numpy =\\n', c_chol\n",
        "  print 'bijector =\\n', sess.run(w_fwd)"
      ],
      "execution_count": 60,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "numpy =\n",
            "[[ 1.0307764   0.        ]\n",
            " [-0.03031695  0.12126781]]\n",
            "bijector =\n",
            "[[ 1.0307764   0.        ]\n",
            " [-0.03031695  0.12126781]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "CF7IFULOvHy3",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Our final distribution\n",
        "\n",
        "Our inverse Wishart operating on Cholesky factors is as follows:\n"
      ]
    },
    {
      "metadata": {
        "id": "BJXoPZ1e-8yh",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "inverse_wishart_cholesky = tfd.TransformedDistribution(\n",
        "    distribution=CholeskyWishart(\n",
        "        df=PRIOR_DF,\n",
        "        scale_tril=np.linalg.cholesky(np.linalg.inv(PRIOR_SCALE))),\n",
        "    bijector=get_wishart_cholesky_to_iw_cholesky())"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "DUC-6bPEapDg",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "We've got our inverse Wishart, but it's kind of slow because we have to do a Cholesky decomposition in the bijector.  Let's return to the precision matrix parameterization and see what we can do there for optimization."
      ]
    },
    {
      "metadata": {
        "id": "PIyb_aYyCzZa",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "# Final(!) Version: using the Cholesky decomposition of the precision matrix\n",
        "\n",
        "An alternative approach is to work with Cholesky factors of the precision matrix.  Here the prior likelihood function is easy to compute, but the data log likelihood function takes more work since TFP doesn't have a version of the multivariate normal that is parameterized by precision."
      ]
    },
    {
      "metadata": {
        "id": "dSOOuAgZtSu5",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Optimized prior log likelihood\n",
        "\n",
        "We use the `CholeskyWishart` distribution we built above to construct the prior.\n"
      ]
    },
    {
      "metadata": {
        "id": "f8V5hA9SUqHy",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# Our new prior.\n",
        "PRIOR_SCALE_CHOLESKY = np.linalg.cholesky(PRIOR_SCALE)\n",
        "\n",
        "def log_lik_prior_cholesky(precisions_cholesky):\n",
        "  rv_precision = CholeskyWishart(\n",
        "      df=PRIOR_DF,\n",
        "      scale_tril=PRIOR_SCALE_CHOLESKY,\n",
        "      validate_args=VALIDATE_ARGS,\n",
        "      allow_nan_stats=ALLOW_NAN_STATS)\n",
        "  return rv_precision.log_prob(precisions_cholesky)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "jn2ey0JdjzhW",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 153
        },
        "outputId": "fa1db665-8996-42a0-fb59-1fdb2f07248d"
      },
      "cell_type": "code",
      "source": [
        "# Check against the slower TF implementation and the NumPy implementation.\n",
        "# Note that when comparing to NumPy, we need to add in the Jacobian correction.\n",
        "with tf.Graph().as_default() as g:\n",
        "  precisions = [np.eye(2, dtype=np.float32),\n",
        "                true_precision]\n",
        "  precisions_cholesky = np.stack([np.linalg.cholesky(m) for m in precisions])\n",
        "  precisions = np.stack(precisions)\n",
        "  lik_tf = log_lik_prior_cholesky(precisions_cholesky)\n",
        "  lik_tf_slow = tfd.TransformedDistribution(\n",
        "      distribution=tfd.Wishart(df=PRIOR_DF, scale=PRIOR_SCALE),\n",
        "      bijector=tfb.Invert(tfb.CholeskyOuterProduct())).log_prob(\n",
        "      precisions_cholesky)\n",
        "  corrections = tfb.Invert(tfb.CholeskyOuterProduct()).inverse_log_det_jacobian(\n",
        "      precisions_cholesky, event_ndims=2)\n",
        "  n = precisions.shape[0]\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  lik_tf_, lik_tf_slow_, corrections_ = sess.run(\n",
        "      [lik_tf, lik_tf_slow, corrections])\n",
        "  for i in range(n):\n",
        "    print i\n",
        "    print 'numpy:', log_lik_prior_numpy(precisions[i]) + corrections_[i]\n",
        "    print 'tensorflow slow:', lik_tf_slow_[i]      \n",
        "    print 'tensorflow fast:', lik_tf_[i]"
      ],
      "execution_count": 63,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "0\n",
            "numpy: -0.8488930160357633\n",
            "tensorflow slow: -0.84889317\n",
            "tensorflow fast: -0.84889317\n",
            "1\n",
            "numpy: -7.442875031036973\n",
            "tensorflow slow: -7.442877\n",
            "tensorflow fast: -7.442876\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "cjjqZccAPaVG",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Optimized data log likelihood\n",
        "\n",
        "We can use TFP's bijectors to build our own version of the multivariate normal.  Here is the key idea:\n",
        "\n",
        "Suppose I have a column vector $X$ whose elements are iid samples of $N(0, 1)$.  We have $\\text{mean}(X) = 0$ and $\\text{cov}(X) = I$\n",
        "\n",
        "Now let $Y = A X + b$.  We have $\\text{mean}(Y) = b$ and $\\text{cov}(Y) = A A^T$\n",
        "\n",
        "Hence we can make vectors with mean $b$ and covariance $C$ using the affine transform $Ax+b$ to vectors of iid standard Normal samples provided $A A^T = C$.  The Cholesky decomposition of $C$ has the desired property.  However, there are other solutions.\n",
        "\n",
        "Let $P = C^{-1}$ and let the Cholesky decomposition of $P$ be $B$, i.e. $B B^T = P$.  Now\n",
        "\n",
        "$P^{-1} = (B B^T)^{-1} = B^{-T} B^{-1} = B^{-T} (B^{-T})^T$\n",
        "\n",
        "So another way to get our desired mean and covariance is to use the affine transform $Y=B^{-T}X + b$.\n",
        "\n",
        "Our approach (courtesy of [this notebook](https://github.com/tensorflow/probability/blob/master/tensorflow_probability/examples/jupyter_notebooks/Bayesian_Gaussian_Mixture_Model.ipynb)):\n",
        "1. Use `tfd.Independent()` to combine a batch of 1-D `Normal` random variables into a single multi-dimensional random variable. The `reinterpreted_batch_ndims` parameter for `Independent()` specifies the number of batch dimensions that should be reinterpreted as event dimensions.  In our case we create a 1-D batch of length 2 that we transform into a 1-D event of length 2, so `reinterpreted_batch_ndims=1`.\n",
        "2. Apply a bijector to add the desired covariance: `tfb.Invert(tfb.Affine(scale_tril=precision_cholesky, adjoint=True))`.  Note that above we're multiplying our iid normal random variables by the transpose of the inverse of the Cholesky factor of the precision matrix $(B^{-T}X)$.  The `tfb.Invert` takes care of inverting $B$, and the `adjoint=True` flag performs the transpose.\n",
        "3. Apply a bijector to add the desired offset: `tfb.Affine(shift=shift)`  Note that we have to do the shift as a separate step from the initial inverted affine transform because otherwise the inverted scale is applied to the shift (since the inverse of $y=Ax+b$ is $x=A^{-1}y - A^{-1}b$).\n"
      ]
    },
    {
      "metadata": {
        "id": "GLUqa6lvPCIM",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "class MVNPrecisionCholesky(tfd.TransformedDistribution):\n",
        "  \"\"\"Multivariate normal parametrized by loc and Cholesky precision matrix.\"\"\"\n",
        "\n",
        "  def __init__(self, loc, precision_cholesky, name=None):\n",
        "    super(MVNPrecisionCholesky, self).__init__(\n",
        "        distribution=tfd.Independent(\n",
        "            tfd.Normal(loc=tf.zeros_like(loc),\n",
        "                       scale=tf.ones_like(loc)),\n",
        "            reinterpreted_batch_ndims=1),\n",
        "        bijector=tfb.Chain([\n",
        "            tfb.Affine(shift=loc),\n",
        "            tfb.Invert(tfb.Affine(scale_tril=precision_cholesky,\n",
        "                                  adjoint=True)),\n",
        "        ]),\n",
        "        name=name)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "5rp-71gFUdUz",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "def log_lik_data_cholesky(precisions_cholesky, replicated_data):\n",
        "  n = tf.shape(precisions_cholesky)[0]  # number of precision matrices\n",
        "  rv_data = MVNPrecisionCholesky(\n",
        "      loc=tf.zeros([n, 2]),\n",
        "      precision_cholesky=precisions_cholesky)\n",
        "  return tf.reduce_sum(rv_data.log_prob(replicated_data), axis=0)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "wp9qyJebgHXu",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 119
        },
        "outputId": "bea24a3c-6aaf-451c-8650-8b7ef01e874e"
      },
      "cell_type": "code",
      "source": [
        "# check against the numpy implementation\n",
        "with tf.Graph().as_default() as g:\n",
        "  true_precision_cholesky = np.linalg.cholesky(true_precision)\n",
        "  precisions = [np.eye(2, dtype=np.float32), true_precision]\n",
        "  precisions_cholesky = np.stack([np.linalg.cholesky(m) for m in precisions])\n",
        "  precisions = np.stack(precisions)\n",
        "  n = precisions_cholesky.shape[0]\n",
        "  replicated_data = np.tile(np.expand_dims(my_data, axis=1), reps=[1, 2, 1])\n",
        "  lik_tf = log_lik_data_cholesky(precisions_cholesky, replicated_data)\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  lik_tf_ = sess.run(lik_tf)\n",
        "  for i in range(n):\n",
        "    print i\n",
        "    print 'numpy:', log_lik_data_numpy(precisions[i], my_data)\n",
        "    print 'tensorflow:', lik_tf_[i]"
      ],
      "execution_count": 66,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "0\n",
            "numpy: -430.7121579578563\n",
            "tensorflow: -430.71204\n",
            "1\n",
            "numpy: -280.81821355532696\n",
            "tensorflow: -280.81815\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "rHZY4zxOt5BH",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Combined log likelihood function\n",
        "\n",
        "Now we combine our prior and data log likelihood functions in a closure."
      ]
    },
    {
      "metadata": {
        "id": "tqx8TS2wYTYh",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "def get_log_lik_cholesky(data, n_chains=1):\n",
        "  # The data argument that is passed in will be available to the inner function\n",
        "  # below so it doesn't have to be passed in as a parameter.\n",
        "  replicated_data = np.tile(np.expand_dims(data, axis=1), reps=[1, n_chains, 1])\n",
        "\n",
        "  def _log_lik_cholesky(precisions_cholesky):\n",
        "    return (log_lik_data_cholesky(precisions_cholesky, replicated_data) +\n",
        "            log_lik_prior_cholesky(precisions_cholesky))\n",
        "\n",
        "  return _log_lik_cholesky"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "Cig7gNSUt7ls",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Constraining bijector\n",
        "\n",
        "Our samples are constrained to be valid Cholesky factors, which means they must be lower triangular matrices with positive diagonals.  The `TransformedTransitionKernel` needs a bijector that maps unconstrained tensors to/from tensors with our desired constraints.  We've removed the Cholesky decomposition from the bijector's inverse, which speeds things up."
      ]
    },
    {
      "metadata": {
        "id": "8Nva4oOGTjN_",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "unconstrained_to_precision_cholesky = tfb.Chain([\n",
        "    # step 2: exponentiate the diagonals    \n",
        "    tfb.TransformDiagonal(tfb.Exp(validate_args=VALIDATE_ARGS)),\n",
        "    # step 1: expand the vector to a lower triangular matrix\n",
        "    tfb.FillTriangular(validate_args=VALIDATE_ARGS),\n",
        "])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "oXcs29Znlzvx",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 306
        },
        "outputId": "b7244ad0-c661-4c01-e753-86027ea6717e"
      },
      "cell_type": "code",
      "source": [
        "# some checks\n",
        "with tf.Graph().as_default() as g:\n",
        "  inv = unconstrained_to_precision_cholesky.inverse(precisions_cholesky)\n",
        "  fwd = unconstrained_to_precision_cholesky.forward(inv)\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  inv_, fwd_ = sess.run([inv, fwd])\n",
        "  print 'precisions_cholesky:\\n', precisions_cholesky\n",
        "  print '\\ninv:\\n', inv_\n",
        "  print '\\nfwd(inv):\\n', fwd_"
      ],
      "execution_count": 69,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "precisions_cholesky:\n",
            "[[[ 1.         0.       ]\n",
            "  [ 0.         1.       ]]\n",
            "\n",
            " [[ 1.1470785  0.       ]\n",
            "  [-2.0647411  1.0000004]]]\n",
            "\n",
            "inv:\n",
            "[[ 0.0000000e+00  0.0000000e+00  0.0000000e+00]\n",
            " [ 3.5762781e-07 -2.0647411e+00  1.3721828e-01]]\n",
            "\n",
            "fwd(inv):\n",
            "[[[ 1.         0.       ]\n",
            "  [ 0.         1.       ]]\n",
            "\n",
            " [[ 1.1470785  0.       ]\n",
            "  [-2.0647411  1.0000004]]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "HU6SK7DMuR6B",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Initial values\n",
        "\n",
        "We generate a tensor of initial values.  We're working with Cholesky factors, so we generate some Cholesky factor initial values."
      ]
    },
    {
      "metadata": {
        "id": "oIOjT1HxZg0C",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# The number of chains is determined by the shape of the initial values.\n",
        "# Here we'll generate 3 chains, so we'll need a tensor of 3 initial values.\n",
        "N_CHAINS = 3\n",
        "\n",
        "np.random.seed(123)\n",
        "\n",
        "initial_values_cholesky = []\n",
        "for i in range(N_CHAINS):\n",
        "  initial_values_cholesky.append(np.array(\n",
        "      [[0.5 + np.random.uniform(), 0.0],\n",
        "       [-0.5 + np.random.uniform(), 0.5 + np.random.uniform()]],\n",
        "      dtype=np.float32))\n",
        "initial_values_cholesky = np.stack(initial_values_cholesky)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "VakfU-Tyuic4",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Sampling\n",
        "\n",
        "We sample N_CHAINS chains using the `TransformedTransitionKernel`."
      ]
    },
    {
      "metadata": {
        "id": "aFzFjNIoYre3",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 272
        },
        "outputId": "40807f56-267b-4aca-bebe-b434561a47b6"
      },
      "cell_type": "code",
      "source": [
        "# Code adapted from tensorflow_probability/python/mcmc/hmc.py\n",
        "with tf.Graph().as_default() as g:\n",
        "  tf.set_random_seed(123)\n",
        "  log_lik_fn = get_log_lik_cholesky(my_data)\n",
        "\n",
        "  # Tuning acceptance rates:\n",
        "  dtype = np.float32\n",
        "  num_warmup_iter = 2500\n",
        "  num_chain_iter = 2500\n",
        "\n",
        "  # Set the target average acceptance ratio for the HMC as suggested by\n",
        "  # Beskos et al. (2013):\n",
        "  # https://projecteuclid.org/download/pdfview_1/euclid.bj/1383661192\n",
        "  target_accept_rate = 0.651\n",
        "\n",
        "  x = tf.get_variable(name='x', initializer=initial_values_cholesky)\n",
        "  step_size = tf.get_variable(name='step_size',\n",
        "                              initializer=tf.constant(0.01, dtype=dtype))\n",
        "\n",
        "  # Initialize the HMC sampler, now wrapped in the TransformedTransitionKernel\n",
        "  ttk = tfp.mcmc.TransformedTransitionKernel(\n",
        "      inner_kernel=tfp.mcmc.HamiltonianMonteCarlo(\n",
        "      target_log_prob_fn=log_lik_fn,\n",
        "      step_size=step_size,\n",
        "      num_leapfrog_steps=3),\n",
        "      bijector=[unconstrained_to_precision_cholesky])\n",
        "\n",
        "  # One iteration\n",
        "  next_x, other_results = ttk.one_step(\n",
        "      current_state=x,\n",
        "      previous_kernel_results=ttk.bootstrap_results(x))\n",
        "\n",
        "  x_update = x.assign(next_x)\n",
        "  precision = tf.matmul(x, x, transpose_b=True)\n",
        "\n",
        "  # Adapt the step size using standard adaptive MCMC procedure. See Section 4.2\n",
        "  # of Andrieu and Thoms (2008):\n",
        "  # http://www4.ncsu.edu/~rsmith/MA797V_S12/Andrieu08_AdaptiveMCMC_Tutorial.pdf\n",
        "\n",
        "  # NOTE: one change from above is that we have to look at \n",
        "  # other_results.inner_results.log_accept_ratio, since the new kernel\n",
        "  # wraps the results from the HMC kernel.\n",
        "  step_size_update = step_size.assign_add(\n",
        "      step_size * tf.where(\n",
        "          tf.exp(tf.minimum(tf.reduce_mean(\n",
        "              other_results.inner_results.log_accept_ratio), 0.)) >\n",
        "              target_accept_rate,\n",
        "          x=0.1, y=-0.1))\n",
        "\n",
        "  # Note, the adaptations are performed during warmup only.\n",
        "  warmup = tf.group([x_update, step_size_update])\n",
        "\n",
        "  init = tf.global_variables_initializer()\n",
        "  \n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  # Initialize\n",
        "  sess.run(init)\n",
        "\n",
        "  # Warm up the sampler and adapt the step size\n",
        "  print 'Warmup'\n",
        "  start_time = time.time()\n",
        "  for i in range(num_warmup_iter):\n",
        "    sess.run(warmup)\n",
        "    if i % 500 == 0:\n",
        "      print 'Step %d' % i\n",
        "  end_time = time.time()\n",
        "  print 'Time per step:', (end_time - start_time) / num_warmup_iter\n",
        "  print 'Step size: %g' % sess.run(step_size)\n",
        "\n",
        "  # Collect samples without adapting step size\n",
        "  print 'Sampling'\n",
        "  start_time = time.time()\n",
        "  precision_samples = np.zeros([num_chain_iter, N_CHAINS, 2, 2])\n",
        "  results = []\n",
        "  for i in range(num_chain_iter):\n",
        "    _, precision_, other_results_ = sess.run(\n",
        "        [x_update, precision, other_results])\n",
        "    precision_samples[i, :] = precision_\n",
        "    results.append(other_results_)\n",
        "    if i % 500 == 0:\n",
        "      print 'Step %d' % i\n",
        "  end_time = time.time()\n",
        "  print 'Time per step:', (end_time - start_time) / num_chain_iter"
      ],
      "execution_count": 71,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Warmup\n",
            "Step 0\n",
            "Step 500\n",
            "Step 1000\n",
            "Step 1500\n",
            "Step 2000\n",
            "Time per step: 0.00133143720627\n",
            "Step size: 0.0658879\n",
            "Sampling\n",
            "Step 0\n",
            "Step 500\n",
            "Step 1000\n",
            "Step 1500\n",
            "Step 2000\n",
            "Time per step: 0.00180924482346\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "9V5D9rCgurdK",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Convergence check"
      ]
    },
    {
      "metadata": {
        "id": "GKcXls81qwig",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "A quick convergence check looks good:"
      ]
    },
    {
      "metadata": {
        "id": "8S70eeurquGj",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 68
        },
        "outputId": "b6ff20bd-1941-470e-e84e-31e8b38b4e75"
      },
      "cell_type": "code",
      "source": [
        "with tf.Graph().as_default() as g:\n",
        "  r_hat = tfp.mcmc.potential_scale_reduction(precision_samples)\n",
        "  g.finalize()\n",
        "\n",
        "with tf.Session(graph=g) as sess:\n",
        "  print 'r_hat:\\n', sess.run(r_hat)"
      ],
      "execution_count": 72,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "r_hat:\n",
            "[[1.00071432 1.00067651]\n",
            " [1.00067651 1.00055981]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "1jX-PqDluuaZ",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "### Comparing results to the analytic posterior"
      ]
    },
    {
      "metadata": {
        "id": "merfcOkkrKMS",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# The output samples have shape [n_steps, n_chains, 2, 2]\n",
        "# Flatten them to [n_steps * n_chains, 2, 2] via reshape:\n",
        "precision_samples_reshaped = np.reshape(precision_samples, newshape=[-1, 2, 2])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "f15131B3skLj",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "And again, the sample means and standard deviations match those of the analytic posterior."
      ]
    },
    {
      "metadata": {
        "id": "ZzDUnYjLsDI3",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 119
        },
        "outputId": "434da413-e122-43ae-9401-d290d4dfb197"
      },
      "cell_type": "code",
      "source": [
        "print 'True posterior mean:\\n', posterior_mean\n",
        "print 'Mean of samples:\\n', np.mean(precision_samples_reshaped, axis=0)"
      ],
      "execution_count": 74,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "True posterior mean:\n",
            "[[ 0.9641778 -1.6534657]\n",
            " [-1.6534657  3.8683152]]\n",
            "Mean of samples:\n",
            "[[ 0.96715741 -1.65766618]\n",
            " [-1.65766618  3.87515952]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "C5ztGXbrsNSe",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 119
        },
        "outputId": "adddb44b-9d89-42e3-9d99-6485f6302741"
      },
      "cell_type": "code",
      "source": [
        "print 'True posterior standard deviation:\\n', posterior_sd\n",
        "print 'Standard deviation of samples:\\n', np.std(precision_samples_reshaped, axis=0)"
      ],
      "execution_count": 75,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "True posterior standard deviation:\n",
            "[[0.1343549 0.2505081]\n",
            " [0.2505081 0.5390366]]\n",
            "Standard deviation of samples:\n",
            "[[0.13456394 0.25147751]\n",
            " [0.25147751 0.54065393]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "dqFQDMOHsXED",
        "colab_type": "text"
      },
      "cell_type": "markdown",
      "source": [
        "Ok, all done!  We've got our optimized sampler working."
      ]
    }
  ]
}
